From 617a0f53faf23dbf99732a610e77933bf4c29135 Mon Sep 17 00:00:00 2001 From: Valentin Tolmer Date: Thu, 11 Nov 2021 10:15:00 +0100 Subject: [PATCH] server: Send an email with the test command --- server/src/infra/mail.rs | 31 +++++++++++++++++++++++++++++++ server/src/infra/mod.rs | 1 + server/src/main.rs | 11 +++++++++-- 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 server/src/infra/mail.rs diff --git a/server/src/infra/mail.rs b/server/src/infra/mail.rs new file mode 100644 index 0000000..969cd29 --- /dev/null +++ b/server/src/infra/mail.rs @@ -0,0 +1,31 @@ +use crate::infra::configuration::MailOptions; +use anyhow::Result; +use lettre::{ + message::Mailbox, transport::smtp::authentication::Credentials, Message, SmtpTransport, + Transport, +}; +use log::debug; + +pub fn send_test_email(to: Mailbox, options: &MailOptions) -> Result<()> { + let from = options + .from + .clone() + .unwrap_or_else(|| "LLDAP ".parse().unwrap()); + let reply_to = options.reply_to.clone().unwrap_or_else(|| from.clone()); + debug!( + "Sending email to '{}' as '{}' via '{}'@'{}':'{}'", + &to, &from, &options.user, &options.server, options.port + ); + let email = Message::builder() + .from(from) + .reply_to(reply_to) + .to(to) + .subject("LLDAP test email") + .body("The test is successful! You can send emails from LLDAP".to_string())?; + let creds = Credentials::new(options.user.clone(), options.password.clone()); + let mailer = SmtpTransport::relay(&options.server)? + .credentials(creds) + .build(); + mailer.send(&email)?; + Ok(()) +} diff --git a/server/src/infra/mod.rs b/server/src/infra/mod.rs index ff2513d..50cb9e0 100644 --- a/server/src/infra/mod.rs +++ b/server/src/infra/mod.rs @@ -7,6 +7,7 @@ pub mod jwt_sql_tables; pub mod ldap_handler; pub mod ldap_server; pub mod logging; +pub mod mail; pub mod sql_backend_handler; pub mod tcp_backend_handler; pub mod tcp_server; diff --git a/server/src/main.rs b/server/src/main.rs index d362250..d11cd89 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -9,7 +9,7 @@ use crate::{ sql_opaque_handler::register_password, sql_tables::PoolOptions, }, - infra::{cli::*, configuration::Configuration, db_cleaner::Scheduler}, + infra::{cli::*, configuration::Configuration, db_cleaner::Scheduler, mail}, }; use actix::Actor; use anyhow::{anyhow, Context, Result}; @@ -99,11 +99,18 @@ fn run_server_command(opts: RunOpts) -> Result<()> { Ok(()) } +fn send_test_email_command(opts: TestEmailOpts) -> Result<()> { + let to = opts.to.parse()?; + let config = infra::configuration::init(opts)?; + infra::logging::init(&config)?; + mail::send_test_email(to, &config.smtp_options) +} + fn main() -> Result<()> { let cli_opts = infra::cli::init(); match cli_opts.command { Command::ExportGraphQLSchema(opts) => infra::graphql::api::export_schema(opts), Command::Run(opts) => run_server_command(opts), - Command::SendTestEmail(_opts) => Ok(()), + Command::SendTestEmail(opts) => send_test_email_command(opts), } }