34 lines
1.1 KiB
Rust
34 lines
1.1 KiB
Rust
use crate::app_config::AppConfig;
|
|
use lettre::message::header::ContentType;
|
|
use lettre::transport::smtp::authentication::Credentials;
|
|
use lettre::{Message, SmtpTransport, Transport};
|
|
use std::fmt::Display;
|
|
|
|
pub async fn send_mail<D: Display>(to: &str, subject: &str, body: D) -> anyhow::Result<()> {
|
|
let conf = AppConfig::get();
|
|
|
|
let email = Message::builder()
|
|
.from(conf.mail_sender.parse()?)
|
|
.to(to.parse()?)
|
|
.subject(subject)
|
|
.header(ContentType::TEXT_PLAIN)
|
|
.body(body.to_string())?;
|
|
|
|
let mut mailer = match conf.smtp_tls {
|
|
true => SmtpTransport::relay(&conf.smtp_relay)?,
|
|
false => SmtpTransport::builder_dangerous(&conf.smtp_relay),
|
|
}
|
|
.port(conf.smtp_port);
|
|
|
|
if let (Some(username), Some(password)) = (&conf.smtp_username, &conf.smtp_password) {
|
|
mailer = mailer.credentials(Credentials::new(username.to_string(), password.to_string()))
|
|
}
|
|
|
|
let mailer = mailer.build();
|
|
|
|
mailer.send(&email)?;
|
|
log::debug!("A mail was sent to {} (subject = {})", to, subject);
|
|
|
|
Ok(())
|
|
}
|