Added setting for accept invalid certificate on SMTP server.
This commit is contained in:
@@ -21,3 +21,4 @@ path = "Maildir"
|
|||||||
#user = "user"
|
#user = "user"
|
||||||
#password = "password"
|
#password = "password"
|
||||||
#tls = true
|
#tls = true
|
||||||
|
#accept_all_certs = true
|
||||||
|
|||||||
+29
-4
@@ -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 transport = if self.tls().unwrap_or(false) {
|
let tls = if let Some(t) = self.accept_all_certs() {
|
||||||
AsyncSmtpTransport::<Tokio1Executor>::starttls_relay(&self.server().clone().unwrap_or_default())
|
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 {
|
} else {
|
||||||
AsyncSmtpTransport::<Tokio1Executor>::relay(&self.server().clone().unwrap_or_default())
|
None
|
||||||
}.expect("Cannot create SMTP mail transport");
|
}
|
||||||
|
} else {
|
||||||
|
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() {
|
let transport = if let Some(p) = self.port() {
|
||||||
transport.port(p)
|
transport.port(p)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+5
-1
@@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user