server: add option to use insecure SMTP connection
This commit is contained in:
@@ -117,6 +117,7 @@ pub struct LdapsOpts {
|
||||
clap::arg_enum! {
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
pub enum SmtpEncryption {
|
||||
NONE,
|
||||
TLS,
|
||||
STARTTLS,
|
||||
}
|
||||
|
||||
@@ -266,6 +266,9 @@ impl ConfigOverrider for SmtpOpts {
|
||||
if let Some(password) = &self.smtp_password {
|
||||
config.smtp_options.password = SecUtf8::from(password.clone());
|
||||
}
|
||||
if let Some(smtp_encryption) = &self.smtp_encryption {
|
||||
config.smtp_options.smtp_encryption = smtp_encryption.clone();
|
||||
}
|
||||
if let Some(tls_required) = self.smtp_tls_required {
|
||||
config.smtp_options.tls_required = Some(tls_required);
|
||||
}
|
||||
|
||||
@@ -26,12 +26,21 @@ async fn send_email(to: Mailbox, subject: &str, body: String, options: &MailOpti
|
||||
options.user.clone(),
|
||||
options.password.unsecure().to_string(),
|
||||
);
|
||||
let relay_factory = match options.smtp_encryption {
|
||||
SmtpEncryption::TLS => AsyncSmtpTransport::<Tokio1Executor>::relay,
|
||||
SmtpEncryption::STARTTLS => AsyncSmtpTransport::<Tokio1Executor>::starttls_relay,
|
||||
let mailer = match options.smtp_encryption {
|
||||
SmtpEncryption::NONE => {
|
||||
AsyncSmtpTransport::<Tokio1Executor>::builder_dangerous(&options.server)
|
||||
}
|
||||
SmtpEncryption::TLS => AsyncSmtpTransport::<Tokio1Executor>::relay(&options.server)?,
|
||||
SmtpEncryption::STARTTLS => {
|
||||
AsyncSmtpTransport::<Tokio1Executor>::starttls_relay(&options.server)?
|
||||
}
|
||||
};
|
||||
let mailer = relay_factory(&options.server)?.credentials(creds).build();
|
||||
mailer.send(email).await?;
|
||||
mailer
|
||||
.credentials(creds)
|
||||
.port(options.port)
|
||||
.build()
|
||||
.send(email)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user