diff --git a/src/job.rs b/src/job.rs index edc026ce3..506ad861b 100644 --- a/src/job.rs +++ b/src/job.rs @@ -203,8 +203,8 @@ impl Job { match task::block_on(smtp.send(context, recipients_list, body, self.job_id)) { Err(crate::smtp::send::Error::SendError(err)) => { // Remote error, retry later. - smtp.disconnect(); info!(context, "SMTP failed to send: {}", err); + smtp.disconnect(); self.try_again_later(TryAgain::AtOnce, Some(err.to_string())); } Err(crate::smtp::send::Error::EnvelopeError(err)) => { diff --git a/src/smtp/mod.rs b/src/smtp/mod.rs index 20cad417c..d07b983cb 100644 --- a/src/smtp/mod.rs +++ b/src/smtp/mod.rs @@ -37,7 +37,6 @@ pub type Result = std::result::Result; pub struct Smtp { #[debug_stub(some = "SmtpTransport")] transport: Option, - transport_connected: bool, /// Email address we are sending from. from: Option, } @@ -50,16 +49,12 @@ impl Smtp { /// Disconnect the SMTP transport and drop it entirely. pub fn disconnect(&mut self) { - if self.transport.is_none() || !self.transport_connected { - return; + if let Some(ref mut transport) = self.transport.take() { + transport.close(); } - - let mut transport = self.transport.take().unwrap(); - transport.close(); - self.transport_connected = false; } - /// Check if a connection already exists. + /// check whether we are connected pub fn is_connected(&self) -> bool { self.transport.is_some() } @@ -143,7 +138,6 @@ impl Smtp { task::block_on(trans.connect()).map_err(Error::ConnectionFailure)?; self.transport = Some(trans); - self.transport_connected = true; context.call_cb(Event::SmtpConnected(format!( "SMTP-LOGIN as {} ok", lp.send_user, diff --git a/src/smtp/send.rs b/src/smtp/send.rs index 29975cce8..c1439b965 100644 --- a/src/smtp/send.rs +++ b/src/smtp/send.rs @@ -36,22 +36,21 @@ impl Smtp { .collect::>() .join(","); + let envelope = + Envelope::new(self.from.clone(), recipients).map_err(Error::EnvelopeError)?; + let mail = SendableEmail::new( + envelope, + format!("{}", job_id), // only used for internal logging + message, + ); if let Some(ref mut transport) = self.transport { - let envelope = - Envelope::new(self.from.clone(), recipients).map_err(Error::EnvelopeError)?; - let mail = SendableEmail::new( - envelope, - format!("{}", job_id), // only used for internal logging - message, - ); - transport.send(mail).await.map_err(Error::SendError)?; context.call_cb(Event::SmtpMessageSent(format!( "Message len={} was smtp-sent to {}", message_len, recipients_display ))); - self.transport_connected = true; + Ok(()) } else { warn!(