Format some common Lettre errors a bit simpler

Currently when for example using the admin interface to send out a test e-mail just
returns `SmtpError`. This is not very helpful. What i have done.

- Match some common Lettre errors to return the error message.
- Other errors will just be passed on as before.

Some small other changes:
- Fixed a clippy warning about using clone().
- Fixed a typo where Lettere was spelled with one t.
pull/1143/head
BlackDex 4 years ago
parent d69968313b
commit 6a0d024c69

@ -79,7 +79,7 @@ make_error! {
RegexError(RegexErr): _has_source, _api_error, RegexError(RegexErr): _has_source, _api_error,
YubiError(YubiErr): _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, AddressError(AddrErr): _has_source, _api_error,
SmtpError(SmtpErr): _has_source, _api_error, SmtpError(SmtpErr): _has_source, _api_error,
FromStrError(FromStrErr): _has_source, _api_error, FromStrError(FromStrErr): _has_source, _api_error,

@ -54,7 +54,7 @@ fn mailer() -> SmtpTransport {
for wanted_mechanism in mechanism.split(',') { for wanted_mechanism in mechanism.split(',') {
for m in &allowed_mechanisms { for m in &allowed_mechanisms {
if m.to_string().to_lowercase() == wanted_mechanism.trim_matches(|c| c == '"' || c == '\'' || c == ' ').to_lowercase() { 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) .subject(subject)
.multipart(alternative)?; .multipart(alternative)?;
let _ = mailer().send(&email)?; match mailer().send(&email) {
Ok(()) 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())
}
}
} }

Loading…
Cancel
Save