fix(imap): do not bubble up errors in IMAP candidate loop

Network errors such as timeouts should not break out of the loop
by bubbling up errors. There may be more candidates to try,
breaking out of the loop skips trying them.
This commit is contained in:
link2xt
2026-07-16 09:49:41 +00:00
committed by l
parent d940f96a5c
commit 492741ac60
+15 -3
View File
@@ -395,18 +395,30 @@ impl Imap {
match login_res { match login_res {
Ok(mut session) => { Ok(mut session) => {
let capabilities = determine_capabilities(&mut session).await?; let capabilities = match determine_capabilities(&mut session).await {
Ok(capabilities) => capabilities,
Err(err) => {
warn!(context, "Failed to determine capabilities: {err:#}.");
continue;
}
};
let resync_request_sender = self.resync_request_sender.clone(); let resync_request_sender = self.resync_request_sender.clone();
let session = if capabilities.can_compress { let session = if capabilities.can_compress {
info!(context, "Enabling IMAP compression."); info!(context, "Enabling IMAP compression.");
let compressed_session = session let compressed_session = match session
.compress(|s| { .compress(|s| {
let session_stream: Box<dyn SessionStream> = Box::new(s); let session_stream: Box<dyn SessionStream> = Box::new(s);
session_stream session_stream
}) })
.await .await
.context("Failed to enable IMAP compression")?; {
Ok(compressed_session) => compressed_session,
Err(err) => {
warn!(context, "Failed to enable IMAP compression: {err:#}.");
continue;
}
};
Session::new( Session::new(
compressed_session, compressed_session,
capabilities, capabilities,