From 64619f5e4d1a5e7a35e1bc2ba3abd82b3232f84f Mon Sep 17 00:00:00 2001 From: Dee HY Date: Wed, 10 Jun 2026 20:37:54 +0800 Subject: [PATCH] feat: prefer secure connections in server discovery fallback When discovering mail server settings, prefer secure (TLS) connections over non-secure ones for IMAP, POP, and SMTP protocols. Previously the code selected the first ready connection regardless of security status, which could result in preferring a plaintext connection even when a secure alternative was available. Signed-off-by: Dee HY --- lib/src/private/util/discover_helper.dart | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/src/private/util/discover_helper.dart b/lib/src/private/util/discover_helper.dart index 80b167a5..9fb5d1fb 100644 --- a/lib/src/private/util/discover_helper.dart +++ b/lib/src/private/util/discover_helper.dart @@ -157,15 +157,25 @@ class DiscoverHelper { futures.add(_tryToConnect(info, isLogEnabled)); } final results = await Future.wait(futures); + // Prefer secure connections, then fall back to non-secure final imapInfo = results.firstWhereOrNull( - (info) => info.ready(ServerType.imap), - ); + (info) => info.ready(ServerType.imap) && info.isSecure, + ) ?? + results.firstWhereOrNull( + (info) => info.ready(ServerType.imap), + ); final popInfo = results.firstWhereOrNull( - (info) => info.ready(ServerType.pop), - ); + (info) => info.ready(ServerType.pop) && info.isSecure, + ) ?? + results.firstWhereOrNull( + (info) => info.ready(ServerType.pop), + ); final smtpInfo = results.firstWhereOrNull( - (info) => info.ready(ServerType.smtp), - ); + (info) => info.ready(ServerType.smtp) && info.isSecure, + ) ?? + results.firstWhereOrNull( + (info) => info.ready(ServerType.smtp), + ); if ((imapInfo == null && popInfo == null) || (smtpInfo == null)) { print( 'failed to find settings for $baseDomain: '