diff --git a/apps/labrinth/.env b/apps/labrinth/.env index 8ee8fd259..1fbb8eebd 100644 --- a/apps/labrinth/.env +++ b/apps/labrinth/.env @@ -84,6 +84,8 @@ HCAPTCHA_SECRET=none SMTP_USERNAME=none SMTP_PASSWORD=none SMTP_HOST=none +SMTP_PORT=465 +SMTP_TLS=tls SITE_VERIFY_EMAIL_PATH=none SITE_RESET_PASSWORD_PATH=none diff --git a/apps/labrinth/src/auth/email/mod.rs b/apps/labrinth/src/auth/email/mod.rs index 80c8bb8e1..77cbea3f2 100644 --- a/apps/labrinth/src/auth/email/mod.rs +++ b/apps/labrinth/src/auth/email/mod.rs @@ -1,8 +1,10 @@ use lettre::message::header::ContentType; use lettre::message::Mailbox; use lettre::transport::smtp::authentication::Credentials; +use lettre::transport::smtp::client::{Tls, TlsParameters}; use lettre::{Address, Message, SmtpTransport, Transport}; use thiserror::Error; +use tracing::warn; #[derive(Error, Debug)] pub enum MailError { @@ -34,9 +36,28 @@ pub fn send_email_raw( let username = dotenvy::var("SMTP_USERNAME")?; let password = dotenvy::var("SMTP_PASSWORD")?; let host = dotenvy::var("SMTP_HOST")?; + let port = dotenvy::var("SMTP_PORT")?.parse::().unwrap_or(465); let creds = Credentials::new(username, password); + let tls_setting = match dotenvy::var("SMTP_TLS")?.as_str() { + "none" => Tls::None, + "opportunistic_start_tls" => { + Tls::Opportunistic(TlsParameters::new(host.to_string())?) + } + "requires_start_tls" => { + Tls::Required(TlsParameters::new(host.to_string())?) + } + "tls" => Tls::Wrapper(TlsParameters::new(host.to_string())?), + _ => { + warn!("Unrecognized SMTP TLS setting. Defaulting to TLS."); + Tls::Wrapper(TlsParameters::new(host.to_string())?) + } + }; - let mailer = SmtpTransport::relay(&host)?.credentials(creds).build(); + let mailer = SmtpTransport::relay(&host)? + .port(port) + .tls(tls_setting) + .credentials(creds) + .build(); mailer.send(&email)?; diff --git a/apps/labrinth/src/lib.rs b/apps/labrinth/src/lib.rs index 18b94a724..61b5839a9 100644 --- a/apps/labrinth/src/lib.rs +++ b/apps/labrinth/src/lib.rs @@ -425,6 +425,8 @@ pub fn check_env_vars() -> bool { failed |= check_var::("SMTP_USERNAME"); failed |= check_var::("SMTP_PASSWORD"); failed |= check_var::("SMTP_HOST"); + failed |= check_var::("SMTP_PORT"); + failed |= check_var::("SMTP_TLS"); failed |= check_var::("SITE_VERIFY_EMAIL_PATH"); failed |= check_var::("SITE_RESET_PASSWORD_PATH");