From 01e7caf65ad88d449f4418be0e25bb79ef4251d9 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Sun, 3 Nov 2019 02:48:41 +0100 Subject: [PATCH] use job_id as mail_id for SendableEmail -- it's only an internal id and job_id is unique enough. --- src/job.rs | 15 +++++---------- src/smtp.rs | 14 +++++++++----- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/job.rs b/src/job.rs index 49c34a0c3..44f64c145 100644 --- a/src/job.rs +++ b/src/job.rs @@ -134,13 +134,8 @@ impl Job { /* connect to SMTP server, if not yet done */ if !context.smtp.lock().unwrap().is_connected() { let loginparam = LoginParam::from_database(context, "configured_"); - if context - .smtp - .lock() - .unwrap() - .connect(context, &loginparam) - .is_err() - { + let connected = context.smtp.lock().unwrap().connect(context, &loginparam); + if connected.is_err() { self.try_again_later(3, None); return; } @@ -177,10 +172,10 @@ impl Job { // its ok/error response processing. Note that if a message // was sent we need to mark it in the database ASAP as we // otherwise might send it twice. - let mut sock = context.smtp.lock().unwrap(); - match sock.send(context, recipients_list, body) { + let mut smtp = context.smtp.lock().unwrap(); + match smtp.send(context, recipients_list, body, self.job_id) { Err(err) => { - sock.disconnect(); + smtp.disconnect(); warn!(context, "smtp failed: {}", err); self.try_again_later(-1, Some(err.to_string())); } diff --git a/src/smtp.rs b/src/smtp.rs index 9e739b92c..253a1c260 100644 --- a/src/smtp.rs +++ b/src/smtp.rs @@ -137,12 +137,13 @@ impl Smtp { } /// SMTP-Send a prepared mail to recipients. - /// returns boolean whether send was successful. + /// on successful send out Ok() is returned. pub fn send<'a>( &mut self, context: &Context, recipients: Vec, message: Vec, + job_id: u32, ) -> Result<(), Error> { let message_len = message.len(); @@ -153,12 +154,15 @@ impl Smtp { .join(","); if let Some(ref mut transport) = self.transport { - let envelope = Envelope::new(self.from.clone(), recipients); - ensure!(envelope.is_ok(), "internal smtp-message construction fail"); - let envelope = envelope.unwrap(); + let envelope = match Envelope::new(self.from.clone(), recipients) { + Ok(env) => env, + Err(err) => { + bail!("{}", err); + } + }; let mail = SendableEmail::new( envelope, - "mail-id".into(), // TODO: random id + format!("{}", job_id), // only used for internal logging message, );