mirror of
https://github.com/chatmail/core.git
synced 2026-04-29 11:26:29 +03:00
try to fix some smtp todos and do better error logging
This commit is contained in:
@@ -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, ¶m)
|
.connect(context, ¶m)
|
||||||
{
|
{
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
|||||||
10
src/job.rs
10
src/job.rs
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
35
src/smtp.rs
35
src/smtp.rs
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user