Added setting for accept invalid certificate on SMTP server.
This commit is contained in:
+29
-4
@@ -15,6 +15,7 @@ cfg_if! { if #[cfg(feature = "ssr")] {
|
||||
use crate::backend::data::ResSumWithItems;
|
||||
use lettre::message::Message as LettreMessage;
|
||||
use lettre::{AsyncSmtpTransport, AsyncFileTransport, AsyncTransport, Tokio1Executor};
|
||||
use lettre::transport::smtp::client::{Tls, TlsParameters};
|
||||
use lettre::transport::smtp::authentication::Credentials;
|
||||
use std::ops::Add;
|
||||
|
||||
@@ -102,11 +103,35 @@ cfg_if! { if #[cfg(feature = "ssr")] {
|
||||
pub async fn send_mail(&self, msg: MailMessage) -> Result<(), AppError> {
|
||||
match self.transport() {
|
||||
MailTransport::Smtp => {
|
||||
let transport = if self.tls().unwrap_or(false) {
|
||||
AsyncSmtpTransport::<Tokio1Executor>::starttls_relay(&self.server().clone().unwrap_or_default())
|
||||
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 {
|
||||
AsyncSmtpTransport::<Tokio1Executor>::relay(&self.server().clone().unwrap_or_default())
|
||||
}.expect("Cannot create SMTP mail transport");
|
||||
None
|
||||
};
|
||||
let transport = if self.tls().unwrap_or(false) {
|
||||
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 {
|
||||
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() {
|
||||
transport.port(p)
|
||||
} else {
|
||||
|
||||
+5
-1
@@ -68,7 +68,8 @@ pub struct Mailing {
|
||||
port: Option<u16>,
|
||||
user: Option<String>,
|
||||
password: Option<String>,
|
||||
tls: Option<bool>
|
||||
tls: Option<bool>,
|
||||
accept_all_certs: Option<bool>
|
||||
}
|
||||
|
||||
#[cfg(feature = "ssr")]
|
||||
@@ -97,6 +98,9 @@ impl Mailing {
|
||||
pub fn tls(&self) -> Option<bool> {
|
||||
self.tls
|
||||
}
|
||||
pub fn accept_all_certs(&self) -> Option<bool> {
|
||||
self.accept_all_certs
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user