commit 303eaabeea594951c52ed92312df4a387467d91a
parent 0c18a7e306da0c3484af62d1d007bb08efb4f981
Author: Daniel GarcĂa <dani-garcia@users.noreply.github.com>
Date: Sat, 4 Jun 2022 19:13:12 +0200
Merge branch 'paolobarbolini-lettre-improvements' into main
Diffstat:
3 files changed, 3 insertions(+), 29 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
@@ -3670,7 +3670,6 @@ dependencies = [
"governor",
"handlebars",
"html5gum",
- "idna 0.2.3",
"job_scheduler",
"jsonwebtoken",
"lettre",
diff --git a/Cargo.toml b/Cargo.toml
@@ -108,7 +108,6 @@ webauthn-rs = "0.3.2"
url = "2.2.2"
# 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 }
percent-encoding = "2.1.0" # URL encoding library used for URL's in the emails
diff --git a/src/mail.rs b/src/mail.rs
@@ -4,7 +4,7 @@ use chrono::NaiveDateTime;
use percent_encoding::{percent_encode, NON_ALPHANUMERIC};
use lettre::{
- message::{header, Mailbox, Message, MultiPart, SinglePart},
+ message::{Mailbox, Message, MultiPart},
transport::smtp::authentication::{Credentials, Mechanism as SmtpAuthMechanism},
transport::smtp::client::{Tls, TlsParameters},
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 {
- 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 email = Message::builder()
.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)?))
.subject(subject)
- .multipart(MultiPart::alternative().singlepart(text).singlepart(html))?;
+ .multipart(MultiPart::alternative_plain_html(body_text, body_html))?;
match mailer().send(&email) {
Ok(_) => Ok(()),