Merge branch 'lettre-improvements' of https://github.com/paolobarbolini/vaultwarden into paolobarbolini-lettre-improvements
This commit is contained in:
commit
6b6f5b8d04
|
@ -3670,7 +3670,6 @@ dependencies = [
|
||||||
"governor",
|
"governor",
|
||||||
"handlebars",
|
"handlebars",
|
||||||
"html5gum",
|
"html5gum",
|
||||||
"idna 0.2.3",
|
|
||||||
"job_scheduler",
|
"job_scheduler",
|
||||||
"jsonwebtoken",
|
"jsonwebtoken",
|
||||||
"lettre",
|
"lettre",
|
||||||
|
|
|
@ -108,7 +108,6 @@ webauthn-rs = "0.3.2"
|
||||||
url = "2.2.2"
|
url = "2.2.2"
|
||||||
|
|
||||||
# Email libraries
|
# Email libraries
|
||||||
idna = "0.2.3" # Punycode conversion
|
|
||||||
lettre = { version = "0.10.0-rc.7", features = ["smtp-transport", "builder", "serde", "native-tls", "hostname", "tracing"], default-features = false }
|
lettre = { version = "0.10.0-rc.7", features = ["smtp-transport", "builder", "serde", "native-tls", "hostname", "tracing"], default-features = false }
|
||||||
percent-encoding = "2.1.0" # URL encoding library used for URL's in the emails
|
percent-encoding = "2.1.0" # URL encoding library used for URL's in the emails
|
||||||
|
|
||||||
|
|
30
src/mail.rs
30
src/mail.rs
|
@ -4,7 +4,7 @@ use chrono::NaiveDateTime;
|
||||||
use percent_encoding::{percent_encode, NON_ALPHANUMERIC};
|
use percent_encoding::{percent_encode, NON_ALPHANUMERIC};
|
||||||
|
|
||||||
use lettre::{
|
use lettre::{
|
||||||
message::{header, Mailbox, Message, MultiPart, SinglePart},
|
message::{Mailbox, Message, MultiPart},
|
||||||
transport::smtp::authentication::{Credentials, Mechanism as SmtpAuthMechanism},
|
transport::smtp::authentication::{Credentials, Mechanism as SmtpAuthMechanism},
|
||||||
transport::smtp::client::{Tls, TlsParameters},
|
transport::smtp::client::{Tls, TlsParameters},
|
||||||
transport::smtp::extension::ClientId,
|
transport::smtp::extension::ClientId,
|
||||||
|
@ -467,37 +467,13 @@ pub fn send_test(address: &str) -> EmptyResult {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_email(address: &str, subject: &str, body_html: String, body_text: String) -> EmptyResult {
|
fn send_email(address: &str, subject: &str, body_html: String, body_text: String) -> EmptyResult {
|
||||||
let address_split: Vec<&str> = address.rsplitn(2, '@').collect();
|
|
||||||
if address_split.len() != 2 {
|
|
||||||
err!("Invalid email address (no @)");
|
|
||||||
}
|
|
||||||
|
|
||||||
let domain_puny = match idna::domain_to_ascii_strict(address_split[0]) {
|
|
||||||
Ok(d) => d,
|
|
||||||
Err(_) => err!("Can't convert email domain to ASCII representation"),
|
|
||||||
};
|
|
||||||
|
|
||||||
let address = format!("{}@{}", address_split[1], domain_puny);
|
|
||||||
|
|
||||||
let html = SinglePart::builder()
|
|
||||||
// We force Base64 encoding because in the past we had issues with different encodings.
|
|
||||||
.header(header::ContentTransferEncoding::Base64)
|
|
||||||
.header(header::ContentType::TEXT_HTML)
|
|
||||||
.body(body_html);
|
|
||||||
|
|
||||||
let text = SinglePart::builder()
|
|
||||||
// We force Base64 encoding because in the past we had issues with different encodings.
|
|
||||||
.header(header::ContentTransferEncoding::Base64)
|
|
||||||
.header(header::ContentType::TEXT_PLAIN)
|
|
||||||
.body(body_text);
|
|
||||||
|
|
||||||
let smtp_from = &CONFIG.smtp_from();
|
let smtp_from = &CONFIG.smtp_from();
|
||||||
let email = Message::builder()
|
let email = Message::builder()
|
||||||
.message_id(Some(format!("<{}@{}>", crate::util::get_uuid(), smtp_from.split('@').collect::<Vec<&str>>()[1])))
|
.message_id(Some(format!("<{}@{}>", crate::util::get_uuid(), smtp_from.split('@').collect::<Vec<&str>>()[1])))
|
||||||
.to(Mailbox::new(None, Address::from_str(&address)?))
|
.to(Mailbox::new(None, Address::from_str(address)?))
|
||||||
.from(Mailbox::new(Some(CONFIG.smtp_from_name()), Address::from_str(smtp_from)?))
|
.from(Mailbox::new(Some(CONFIG.smtp_from_name()), Address::from_str(smtp_from)?))
|
||||||
.subject(subject)
|
.subject(subject)
|
||||||
.multipart(MultiPart::alternative().singlepart(text).singlepart(html))?;
|
.multipart(MultiPart::alternative_plain_html(body_text, body_html))?;
|
||||||
|
|
||||||
match mailer().send(&email) {
|
match mailer().send(&email) {
|
||||||
Ok(_) => Ok(()),
|
Ok(_) => Ok(()),
|
||||||
|
|
Loading…
Reference in New Issue