From 11052951b74b9ad4b6a9412ae490086235f9154b Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 3 Jan 2021 13:40:40 +0100 Subject: Rewrite in Rust --- src/mail.rs | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/mail.rs (limited to 'src/mail.rs') diff --git a/src/mail.rs b/src/mail.rs new file mode 100644 index 0000000..d86cff3 --- /dev/null +++ b/src/mail.rs @@ -0,0 +1,59 @@ +use lettre::sendmail::SendmailTransport; +use lettre::{SendableEmail, Transport}; +use lettre_email::Email; + +use crate::model::config::Config; + +static FROM: &str = "contact@guyonvarch.me"; + +pub fn send( + config: &Config, + to: Vec<(String, String)>, + subject: String, + message: String, +) -> bool { + match prepare_email(to.clone(), subject.clone(), message.clone()) { + Ok(email) => { + if config.mock_mails { + let formatted_to = to + .into_iter() + .map(|t| t.0) + .collect::>() + .join(", "); + info!( + "MOCK MAIL\nto: {}\nsubject: {}\n\n{}", + formatted_to, subject, message + ); + true + } else { + let mut sender = + SendmailTransport::new_with_command(&config.sendmail_path); + match sender.send(email) { + Ok(_) => true, + Err(err) => { + error!("Error sending email: {:?}", err); + false + } + } + } + } + Err(err) => { + error!("Error preparing email: {:?}", err); + false + } + } +} + +fn prepare_email( + to: Vec<(String, String)>, + subject: String, + message: String, +) -> Result { + let mut email = Email::builder().from(FROM).subject(subject).text(message); + + for (address, name) in to.iter() { + email = email.to((address, name)); + } + + email.build().map(|e| e.into()) +} -- cgit v1.2.3