From 492741ac605b2bfb79f1302fad8694e496d6b8da Mon Sep 17 00:00:00 2001 From: link2xt Date: Sun, 7 Jun 2026 00:13:46 +0200 Subject: [PATCH] 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. --- src/imap.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/imap.rs b/src/imap.rs index 153329993..cf156afee 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -395,18 +395,30 @@ impl Imap { match login_res { 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 session = if capabilities.can_compress { info!(context, "Enabling IMAP compression."); - let compressed_session = session + let compressed_session = match session .compress(|s| { let session_stream: Box = Box::new(s); session_stream }) .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( compressed_session, capabilities,