commit 99da5fbebbe9635608b50f94cf52e7684819692d
parent b24929a24341d15324220bcaacf41f169311f57d
Author: Daniel GarcĂa <dani-garcia@users.noreply.github.com>
Date: Mon, 14 Sep 2020 22:18:47 +0200
Merge pull request #1143 from BlackDex/better-lettre-errors
Format some common Lettre errors a bit simpler
Diffstat:
2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/src/error.rs b/src/error.rs
@@ -79,7 +79,7 @@ make_error! {
RegexError(RegexErr): _has_source, _api_error,
YubiError(YubiErr): _has_source, _api_error,
- LetreError(LettreErr): _has_source, _api_error,
+ LettreError(LettreErr): _has_source, _api_error,
AddressError(AddrErr): _has_source, _api_error,
SmtpError(SmtpErr): _has_source, _api_error,
FromStrError(FromStrErr): _has_source, _api_error,
diff --git a/src/mail.rs b/src/mail.rs
@@ -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())
+ }
+ }
}