diff --git a/config/defaults.hjson b/config/defaults.hjson index 663aa4b57..6d7d520a1 100644 --- a/config/defaults.hjson +++ b/config/defaults.hjson @@ -76,8 +76,8 @@ smtp_password: "string" # Address to send emails from, eg noreply@your-instance.com smtp_from_address: "noreply@example.com" - # Whether or not smtp connections should use tls - use_tls: true + # Whether or not smtp connections should use tls. Can be missing (IE None), tls, or starttls + use_tls: "string" } # Parameters for automatic configuration of new instance (only used at first start) setup: { diff --git a/crates/utils/src/email.rs b/crates/utils/src/email.rs index d9ac1710d..b6280927d 100644 --- a/crates/utils/src/email.rs +++ b/crates/utils/src/email.rs @@ -1,11 +1,7 @@ use crate::{settings::structs::Settings, LemmyError}; use lettre::{ message::{header, Mailbox, MultiPart, SinglePart}, - transport::smtp::{ - authentication::Credentials, - client::{Tls, TlsParameters}, - extension::ClientId, - }, + transport::smtp::{authentication::Credentials, extension::ClientId}, Address, Message, SmtpTransport, @@ -77,13 +73,21 @@ pub fn send_email( // don't worry about 'dangeous'. it's just that leaving it at the default configuration // is bad. - let mut builder = SmtpTransport::builder_dangerous(smtp_server).port(smtp_port); // Set the TLS - if email_config.use_tls { - let tls_config = TlsParameters::new(smtp_server.to_string()).expect("the TLS backend is happy"); - builder = builder.tls(Tls::Wrapper(tls_config)); - } + let builder_dangerous = SmtpTransport::builder_dangerous(smtp_server).port(smtp_port); + + let mut builder = if let Some(tls_type) = email_config.use_tls { + if tls_type == "starttls" { + SmtpTransport::starttls_relay(smtp_server)? + } else if tls_type == "tls" { + SmtpTransport::relay(smtp_server)? + } else { + builder_dangerous + } + } else { + builder_dangerous + }; // Set the creds if they exist if let (Some(username), Some(password)) = (email_config.smtp_login, email_config.smtp_password) { diff --git a/crates/utils/src/settings/structs.rs b/crates/utils/src/settings/structs.rs index 1f7121347..da0526fa0 100644 --- a/crates/utils/src/settings/structs.rs +++ b/crates/utils/src/settings/structs.rs @@ -89,7 +89,7 @@ pub struct DatabaseConfig { pub pool_size: u32, } -#[derive(Debug, Deserialize, Serialize, Clone, Document)] +#[derive(Debug, Deserialize, Serialize, Clone, Document, SmartDefault)] pub struct EmailConfig { /// Hostname and port of the smtp server #[doku(example = "localhost:25")] @@ -101,8 +101,9 @@ pub struct EmailConfig { #[doku(example = "noreply@example.com")] /// Address to send emails from, eg "noreply@your-instance.com" pub smtp_from_address: String, - /// Whether or not smtp connections should use tls - pub use_tls: bool, + /// Whether or not smtp connections should use tls. Can be missing (IE None), tls, or starttls + #[default(None)] + pub use_tls: Option, } #[derive(Debug, Deserialize, Serialize, Clone, SmartDefault, Document)]