Browse Source
Merge pull request #585 from ViViDboarder/mail-auth-over-insecure
Allow explicitly defined smtp auth mechansim
pull/599/head
1.10.0
Daniel García
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
15 additions and
0 deletions
.env.template
src/config.rs
src/mail.rs
@ -149,3 +149,4 @@
# SMTP_SSL=true
# SMTP_SSL=true
# SMTP_USERNAME=username
# SMTP_USERNAME=username
# SMTP_PASSWORD=password
# SMTP_PASSWORD=password
# SMTP_AUTH_MECHANISM="Plain"
@ -345,6 +345,8 @@ make_config! {
smtp_username : String , true , option ;
smtp_username : String , true , option ;
/// Password
/// Password
smtp_password : Pass , true , option ;
smtp_password : Pass , true , option ;
/// Json form auth mechanism |> Defaults for ssl is "Plain" and "Login" and nothing for non-ssl connections. Possible values: ["Plain", "Login", "Xoauth2"]
smtp_auth_mechanism : String , true , option ;
} ,
} ,
}
}
@ -1,4 +1,5 @@
use lettre ::smtp ::authentication ::Credentials ;
use lettre ::smtp ::authentication ::Credentials ;
use lettre ::smtp ::authentication ::Mechanism as SmtpAuthMechanism ;
use lettre ::smtp ::ConnectionReuseParameters ;
use lettre ::smtp ::ConnectionReuseParameters ;
use lettre ::{ ClientSecurity , ClientTlsParameters , SmtpClient , SmtpTransport , Transport } ;
use lettre ::{ ClientSecurity , ClientTlsParameters , SmtpClient , SmtpTransport , Transport } ;
use lettre_email ::{ EmailBuilder , MimeMultipartType , PartBuilder } ;
use lettre_email ::{ EmailBuilder , MimeMultipartType , PartBuilder } ;
@ -39,6 +40,17 @@ fn mailer() -> SmtpTransport {
_ = > smtp_client ,
_ = > smtp_client ,
} ;
} ;
let smtp_client = match & CONFIG . smtp_auth_mechanism ( ) {
Some ( auth_mechanism_json ) = > {
let auth_mechanism = serde_json ::from_str ::< SmtpAuthMechanism > ( & auth_mechanism_json ) ;
match auth_mechanism {
Ok ( auth_mechanism ) = > smtp_client . authentication_mechanism ( auth_mechanism ) ,
Err ( _ ) = > panic ! ( "Failure to parse mechanism. Is it proper Json? Eg. `\"Plain\"` not `Plain`" ) ,
}
} ,
_ = > smtp_client ,
} ;
smtp_client
smtp_client
. smtp_utf8 ( true )
. smtp_utf8 ( true )
. connection_reuse ( ConnectionReuseParameters ::NoReuse )
. connection_reuse ( ConnectionReuseParameters ::NoReuse )