add functionality to send attachmets, Fixes #113
This commit is contained in:
@ -1,8 +1,12 @@
|
||||
use std::error::Error;
|
||||
use std::{error::Error, fs};
|
||||
|
||||
use lettre::{
|
||||
message::header::ContentType, transport::smtp::authentication::Credentials, Message,
|
||||
SmtpTransport, Transport,
|
||||
message::{
|
||||
header::{self, ContentType},
|
||||
Attachment, MultiPart, SinglePart,
|
||||
},
|
||||
transport::smtp::authentication::Credentials,
|
||||
Message, SmtpTransport, Transport,
|
||||
};
|
||||
use sqlx::SqlitePool;
|
||||
|
||||
@ -13,7 +17,7 @@ use super::{family::Family, log::Log, role::Role, user::User};
|
||||
pub struct Mail {}
|
||||
|
||||
impl Mail {
|
||||
pub async fn send(db: &SqlitePool, data: MailToSend, smtp_pw: String) -> bool {
|
||||
pub async fn send(db: &SqlitePool, data: MailToSend<'_>, smtp_pw: String) -> bool {
|
||||
let mut email = Message::builder()
|
||||
.from(
|
||||
"ASKÖ Ruderverein Donau Linz <no-reply@rudernlinz.at>"
|
||||
@ -45,12 +49,30 @@ impl Mail {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: handle attachments
|
||||
let mut multipart = MultiPart::mixed().singlepart(
|
||||
SinglePart::builder()
|
||||
.header(header::ContentType::TEXT_HTML)
|
||||
.body(String::from(data.body)),
|
||||
);
|
||||
|
||||
for temp_file in &data.files {
|
||||
let content = fs::read(temp_file.path().unwrap()).unwrap();
|
||||
let media_type = format!("{}", temp_file.content_type().unwrap().media_type());
|
||||
let content_type = ContentType::parse(&media_type).unwrap();
|
||||
let attachment = Attachment::new(format!(
|
||||
"{}.{}",
|
||||
temp_file.name().unwrap(),
|
||||
temp_file.content_type().unwrap().extension().unwrap()
|
||||
))
|
||||
.body(content, content_type);
|
||||
|
||||
multipart = multipart.singlepart(attachment);
|
||||
}
|
||||
|
||||
let email = email
|
||||
.subject(data.subject)
|
||||
.header(ContentType::TEXT_PLAIN)
|
||||
.body(String::from(data.body))
|
||||
.multipart(multipart)
|
||||
.unwrap();
|
||||
|
||||
let creds = Credentials::new("no-reply@rudernlinz.at".to_owned(), smtp_pw);
|
||||
|
Reference in New Issue
Block a user