56 lines
1.4 KiB
Rust
56 lines
1.4 KiB
Rust
|
use crate::settings::Settings;
|
||
|
use lettre::{
|
||
|
smtp::{
|
||
|
authentication::{Credentials, Mechanism},
|
||
|
extension::ClientId,
|
||
|
ConnectionReuseParameters,
|
||
|
},
|
||
|
ClientSecurity,
|
||
|
SmtpClient,
|
||
|
Transport,
|
||
|
};
|
||
|
use lettre_email::Email;
|
||
|
|
||
|
pub fn send_email(
|
||
|
subject: &str,
|
||
|
to_email: &str,
|
||
|
to_username: &str,
|
||
|
html: &str,
|
||
|
) -> Result<(), String> {
|
||
|
let email_config = Settings::get().email.ok_or("no_email_setup")?;
|
||
|
|
||
|
let email = Email::builder()
|
||
|
.to((to_email, to_username))
|
||
|
.from(email_config.smtp_from_address.to_owned())
|
||
|
.subject(subject)
|
||
|
.html(html)
|
||
|
.build()
|
||
|
.unwrap();
|
||
|
|
||
|
let mailer = if email_config.use_tls {
|
||
|
SmtpClient::new_simple(&email_config.smtp_server).unwrap()
|
||
|
} else {
|
||
|
SmtpClient::new(&email_config.smtp_server, ClientSecurity::None).unwrap()
|
||
|
}
|
||
|
.hello_name(ClientId::Domain(Settings::get().hostname))
|
||
|
.smtp_utf8(true)
|
||
|
.authentication_mechanism(Mechanism::Plain)
|
||
|
.connection_reuse(ConnectionReuseParameters::ReuseUnlimited);
|
||
|
let mailer = if let (Some(login), Some(password)) =
|
||
|
(&email_config.smtp_login, &email_config.smtp_password)
|
||
|
{
|
||
|
mailer.credentials(Credentials::new(login.to_owned(), password.to_owned()))
|
||
|
} else {
|
||
|
mailer
|
||
|
};
|
||
|
|
||
|
let mut transport = mailer.transport();
|
||
|
let result = transport.send(email.into());
|
||
|
transport.close();
|
||
|
|
||
|
match result {
|
||
|
Ok(_) => Ok(()),
|
||
|
Err(e) => Err(e.to_string()),
|
||
|
}
|
||
|
}
|