X-Git-Url: http://git.euphorik.ch/index.cgi?a=blobdiff_plain;f=backend%2Fsrc%2Femail.rs;h=4d906fff79fee06dc75f5c5ce585fabb4c827a07;hb=HEAD;hp=9b095d5f514b4442bb0c5a437279774507bed6f3;hpb=8a3fef096d720666dc8a54789aee02250642d8a1;p=recipes.git diff --git a/backend/src/email.rs b/backend/src/email.rs index 9b095d5..4d906ff 100644 --- a/backend/src/email.rs +++ b/backend/src/email.rs @@ -1,17 +1,57 @@ +use derive_more::Display; use lettre::{transport::smtp::authentication::Credentials, Message, SmtpTransport, Transport}; +use std::time::Duration; -/// -pub fn send_validation(site_url: &str, email: &str, token: &str, smtp_login: &str, smtp_password: &str) -> Result<(), Box> { +use crate::consts; + +#[derive(Debug, Display)] +pub enum Error { + ParseError(lettre::address::AddressError), + SmtpError(lettre::transport::smtp::Error), + Email(lettre::error::Error), +} + +impl From for Error { + fn from(error: lettre::address::AddressError) -> Self { + Error::ParseError(error) + } +} + +impl From for Error { + fn from(error: lettre::transport::smtp::Error) -> Self { + Error::SmtpError(error) + } +} + +impl From for Error { + fn from(error: lettre::error::Error) -> Self { + Error::Email(error) + } +} + +pub fn send_validation( + site_url: &str, + email: &str, + token: &str, + smtp_login: &str, + smtp_password: &str, +) -> Result<(), Error> { let email = Message::builder() .message_id(None) .from("recipes@gburri.org".parse()?) .to(email.parse()?) .subject("Recipes.gburri.org account validation") - .body(format!("Follow this link to confirm your inscription: {}/validation?token={}", site_url, token))?; + .body(format!( + "Follow this link to confirm your inscription: {}/validation?token={}", + site_url, token + ))?; let credentials = Credentials::new(smtp_login.to_string(), smtp_password.to_string()); - let mailer = SmtpTransport::relay("mail.gandi.net")?.credentials(credentials).build(); + let mailer = SmtpTransport::relay("mail.gandi.net")? + .credentials(credentials) + .timeout(Some(consts::SEND_EMAIL_TIMEOUT)) + .build(); if let Err(error) = mailer.send(&email) { eprintln!("Error when sending E-mail:\n{:?}", &error);