feat: do not use ConfiguredAddr when connecting to SMTP

This commit is contained in:
link2xt
2026-09-18 17:10:29 +00:00
committed by l
parent 8f39d7510f
commit 310dda494c
5 changed files with 47 additions and 29 deletions
+7 -5
View File
@@ -42,10 +42,12 @@ use crate::{constants, stats};
#[strum(serialize_all = "snake_case")]
pub enum Config {
/// Deprecated(2026-04).
/// Use ConfiguredAddr, [`crate::login_param::EnteredLoginParam`],
/// or add_transport{from_qr}()/list_transports() instead.
///
/// Email address, used in the `From:` field.
/// Email address used by the deprecated configure() procedure.
///
/// Use add_transport{from_qr}() to configure new transports,
/// Use list_transports() to learn about configured transports,
/// including their addresses.
Addr,
/// Deprecated(2026-04).
@@ -195,9 +197,9 @@ pub enum Config {
#[strum(props(default = "0"))]
DeleteDeviceAfter,
/// The address of the transport used for sending.
/// Deprecated(2026-09).
///
/// Device-local, other devices choose their own sending transport.
/// Use ConfiguredLoginParam and list_transports() instead.
ConfiguredAddr,
/// Deprecated(2026-04).
+4
View File
@@ -684,6 +684,10 @@ async fn test_ephemeral_msg_offline() -> Result<()> {
check_msg_will_be_deleted(alice, msg.id, &chat, now, now + i64::from(duration) + 1).await?;
assert!(alice.sql.exists(stmt, (msg.id,)).await?);
alice
.assert_warn("No SMTP connection candidates provided")
.await;
Ok(())
}
+4
View File
@@ -631,6 +631,10 @@ async fn test_delete_msgs_offline() -> Result<()> {
delete_msgs(alice, &[msg.id]).await?;
assert!(!alice.sql.exists(stmt, (msg.id,)).await?);
alice
.assert_warn("No SMTP connection candidates provided")
.await;
Ok(())
}
+29 -12
View File
@@ -98,19 +98,36 @@ impl Smtp {
}
self.connectivity.set_connecting(context);
let (_transport_id, lp) = ConfiguredLoginParam::load(context)
.await?
.context("Not configured")?;
let proxy_config = ProxyConfig::load(context).await?;
self.connect(
context,
&lp.smtp,
&lp.smtp_password,
&proxy_config,
&lp.addr,
lp.strict_tls(proxy_config.is_some())?,
)
.await
let transports = ConfiguredLoginParam::load_all(context).await?;
// Try to connect to the newest transport first. If sending is unreliable,
// user can configure a new transport and it will be the one used.
// Conversely, if user just added a new transport and sending got less reliable,
// user can restore old state by removing the just added transport.
for (transport_id, lp) in transports.into_iter().rev() {
info!(context, "Trying to connect to transport {transport_id}.");
match self
.connect(
context,
&lp.smtp,
&lp.smtp_password,
&proxy_config,
&lp.addr,
lp.strict_tls(proxy_config.is_some())?,
)
.await
{
Ok(()) => return Ok(()),
Err(err) => {
warn!(
context,
"Failed to connect to SMTP transport {transport_id}: {err:#}."
);
}
}
}
bail!("Failed to connect to any SMTP server");
}
/// Connect using the provided login params.