diff --git a/src/imap.rs b/src/imap.rs index 1533299932..29acf6e8c5 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -350,7 +350,7 @@ impl Imap { let login_params = prioritize_server_login_params(&context.sql, &self.lp, "imap").await?; let mut first_error = None; - for lp in login_params { + 'candidate: for lp in login_params { info!(context, "IMAP trying to connect to {}.", lp.connection); let connection_candidate = lp.connection.clone(); let client = match Client::connect( @@ -366,7 +366,7 @@ impl Imap { Err(err) => { warn!(context, "{err:#}."); first_error.get_or_insert(err); - continue; + continue 'candidate; } }; @@ -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 'candidate; + } + }; 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 'candidate; + } + }; Session::new( compressed_session, capabilities,