try to fix some smtp todos and do better error logging

This commit is contained in:
holger krekel
2019-11-03 02:12:29 +01:00
parent a3b90a08b6
commit 1cfeb730c3
3 changed files with 36 additions and 30 deletions

View File

@@ -531,21 +531,26 @@ fn try_smtp_one_param(context: &Context, param: &LoginParam) -> Option<bool> {
param.send_user, param.send_server, param.send_port, param.server_flags param.send_user, param.send_server, param.send_port, param.server_flags
); );
info!(context, "Trying: {}", inf); info!(context, "Trying: {}", inf);
if context match context
.smtp .smtp
.clone() .clone()
.lock() .lock()
.unwrap() .unwrap()
.connect(context, &param) .connect(context, &param)
{ {
info!(context, "success: {}", inf); Ok(()) => {
return Some(true); info!(context, "success: {}", inf);
Some(true)
}
Err(err) => {
if context.shall_stop_ongoing() {
Some(false)
} else {
warn!(context, "could not connect: {}", err);
None
}
}
} }
if context.shall_stop_ongoing() {
return Some(false);
}
info!(context, "could not connect: {}", inf);
None
} }
/******************************************************************************* /*******************************************************************************

View File

@@ -134,9 +134,13 @@ impl Job {
/* connect to SMTP server, if not yet done */ /* connect to SMTP server, if not yet done */
if !context.smtp.lock().unwrap().is_connected() { if !context.smtp.lock().unwrap().is_connected() {
let loginparam = LoginParam::from_database(context, "configured_"); let loginparam = LoginParam::from_database(context, "configured_");
let connected = context.smtp.lock().unwrap().connect(context, &loginparam); if context
.smtp
if !connected { .lock()
.unwrap()
.connect(context, &loginparam)
.is_err()
{
self.try_again_later(3, None); self.try_again_later(3, None);
return; return;
} }

View File

@@ -44,27 +44,24 @@ impl Smtp {
} }
/// Connect using the provided login params /// Connect using the provided login params
pub fn connect(&mut self, context: &Context, lp: &LoginParam) -> bool { pub fn connect(&mut self, context: &Context, lp: &LoginParam) -> Result<(), Error> {
if self.is_connected() { if self.is_connected() {
warn!(context, "SMTP already connected."); warn!(context, "SMTP already connected.");
return true; return Ok(());
} }
if lp.send_server.is_empty() || lp.send_port == 0 { if lp.send_server.is_empty() || lp.send_port == 0 {
context.call_cb(Event::ErrorNetwork("SMTP bad parameters.".into())); context.call_cb(Event::ErrorNetwork("SMTP bad parameters.".into()));
bail!("SMTP Bad parameters");
} }
self.from = if let Ok(addr) = EmailAddress::new(lp.addr.clone()) { self.from = match EmailAddress::new(lp.addr.clone()) {
Some(addr) Ok(addr) => Some(addr),
} else { Err(err) => {
None bail!("invalid login address {}: {}", lp.addr, err);
}
}; };
if self.from.is_none() {
// TODO: print error
return false;
}
let domain = &lp.send_server; let domain = &lp.send_server;
let port = lp.send_port as u16; let port = lp.send_port as u16;
@@ -76,11 +73,12 @@ impl Smtp {
let addr = &lp.addr; let addr = &lp.addr;
let send_pw = &lp.send_pw; let send_pw = &lp.send_pw;
let access_token = dc_get_oauth2_access_token(context, addr, send_pw, false); let access_token = dc_get_oauth2_access_token(context, addr, send_pw, false);
if access_token.is_none() { ensure!(
return false; access_token.is_some(),
} "could not get oaut2_access token addr={}",
addr
);
let user = &lp.send_user; let user = &lp.send_user;
( (
lettre::smtp::authentication::Credentials::new( lettre::smtp::authentication::Credentials::new(
user.to_string(), user.to_string(),
@@ -125,18 +123,17 @@ impl Smtp {
"SMTP-LOGIN as {} ok", "SMTP-LOGIN as {} ok",
lp.send_user, lp.send_user,
))); )));
return true; return Ok(());
} }
Err(err) => { Err(err) => {
warn!(context, "SMTP: failed to connect {:?}", err); bail!("SMTP: failed to connect {:?}", err);
} }
} }
} }
Err(err) => { Err(err) => {
warn!(context, "SMTP: failed to setup connection {:?}", err); bail!("SMTP: failed to setup connection {:?}", err);
} }
} }
false
} }
/// SMTP-Send a prepared mail to recipients. /// SMTP-Send a prepared mail to recipients.