|
|
@ -54,7 +54,7 @@ fn mailer() -> SmtpTransport { |
|
|
|
for wanted_mechanism in mechanism.split(',') { |
|
|
|
for m in &allowed_mechanisms { |
|
|
|
if m.to_string().to_lowercase() == wanted_mechanism.trim_matches(|c| c == '"' || c == '\'' || c == ' ').to_lowercase() { |
|
|
|
selected_mechanisms.push(m.clone()); |
|
|
|
selected_mechanisms.push(*m); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
@ -330,6 +330,24 @@ fn send_email(address: &str, subject: &str, body_html: &str, body_text: &str) -> |
|
|
|
.subject(subject) |
|
|
|
.multipart(alternative)?; |
|
|
|
|
|
|
|
let _ = mailer().send(&email)?; |
|
|
|
Ok(()) |
|
|
|
match mailer().send(&email) { |
|
|
|
Ok(_) => Ok(()), |
|
|
|
// Match some common errors and make them more user friendly
|
|
|
|
Err(e) => match e { |
|
|
|
lettre::transport::smtp::Error::Client(x) => { |
|
|
|
err!(format!("SMTP Client error: {}", x)); |
|
|
|
}, |
|
|
|
lettre::transport::smtp::Error::Transient(x) => { |
|
|
|
err!(format!("SMTP 4xx error: {:?}", x.message)); |
|
|
|
}, |
|
|
|
lettre::transport::smtp::Error::Permanent(x) => { |
|
|
|
err!(format!("SMTP 5xx error: {:?}", x.message)); |
|
|
|
}, |
|
|
|
lettre::transport::smtp::Error::Io(x) => { |
|
|
|
err!(format!("SMTP IO error: {}", x)); |
|
|
|
}, |
|
|
|
// Fallback for all other errors
|
|
|
|
_ => Err(e.into()) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|