Added setting for accept invalid certificate on SMTP server.

main
Josef Rokos 1 year ago
parent 2d8642cb2a
commit 65e80640d5

@ -21,3 +21,4 @@ path = "Maildir"
#user = "user" #user = "user"
#password = "password" #password = "password"
#tls = true #tls = true
#accept_all_certs = true

@ -15,6 +15,7 @@ cfg_if! { if #[cfg(feature = "ssr")] {
use crate::backend::data::ResSumWithItems; use crate::backend::data::ResSumWithItems;
use lettre::message::Message as LettreMessage; use lettre::message::Message as LettreMessage;
use lettre::{AsyncSmtpTransport, AsyncFileTransport, AsyncTransport, Tokio1Executor}; use lettre::{AsyncSmtpTransport, AsyncFileTransport, AsyncTransport, Tokio1Executor};
use lettre::transport::smtp::client::{Tls, TlsParameters};
use lettre::transport::smtp::authentication::Credentials; use lettre::transport::smtp::authentication::Credentials;
use std::ops::Add; use std::ops::Add;
@ -102,11 +103,35 @@ cfg_if! { if #[cfg(feature = "ssr")] {
pub async fn send_mail(&self, msg: MailMessage) -> Result<(), AppError> { pub async fn send_mail(&self, msg: MailMessage) -> Result<(), AppError> {
match self.transport() { match self.transport() {
MailTransport::Smtp => { MailTransport::Smtp => {
let tls = if let Some(t) = self.accept_all_certs() {
if t {
let tls = TlsParameters::builder(self.server().clone().unwrap_or_default())
.dangerous_accept_invalid_certs(true)
.dangerous_accept_invalid_hostnames(true);
Some(tls.build().expect("Cannot build TLS params"))
} else {
None
}
} else {
None
};
let transport = if self.tls().unwrap_or(false) { let transport = if self.tls().unwrap_or(false) {
AsyncSmtpTransport::<Tokio1Executor>::starttls_relay(&self.server().clone().unwrap_or_default()) let transport = AsyncSmtpTransport::<Tokio1Executor>::starttls_relay(&self.server().clone().unwrap_or_default())
.expect("Cannot create SMTP mail transport");
if let Some(t) = tls {
transport.tls(Tls::Required(t))
} else { } else {
AsyncSmtpTransport::<Tokio1Executor>::relay(&self.server().clone().unwrap_or_default()) transport
}.expect("Cannot create SMTP mail transport"); }
} else {
let transport = AsyncSmtpTransport::<Tokio1Executor>::relay(&self.server().clone().unwrap_or_default())
.expect("Cannot create SMTP mail transport");
if let Some(t) = tls {
transport.tls(Tls::Wrapper(t))
} else {
transport
}
};
let transport = if let Some(p) = self.port() { let transport = if let Some(p) = self.port() {
transport.port(p) transport.port(p)
} else { } else {

@ -68,7 +68,8 @@ pub struct Mailing {
port: Option<u16>, port: Option<u16>,
user: Option<String>, user: Option<String>,
password: Option<String>, password: Option<String>,
tls: Option<bool> tls: Option<bool>,
accept_all_certs: Option<bool>
} }
#[cfg(feature = "ssr")] #[cfg(feature = "ssr")]
@ -97,6 +98,9 @@ impl Mailing {
pub fn tls(&self) -> Option<bool> { pub fn tls(&self) -> Option<bool> {
self.tls self.tls
} }
pub fn accept_all_certs(&self) -> Option<bool> {
self.accept_all_certs
}
} }

Loading…
Cancel
Save