diff --git a/Wino.Core/Integration/ImapClientPool.cs b/Wino.Core/Integration/ImapClientPool.cs
index bd531566..51b2aaec 100644
--- a/Wino.Core/Integration/ImapClientPool.cs
+++ b/Wino.Core/Integration/ImapClientPool.cs
@@ -69,15 +69,20 @@ namespace Wino.Core.Integration
ImapClientPoolOptions = imapClientPoolOptions;
}
- private async Task EnsureConnectivityAsync(ImapClient client, bool isCreatedNew)
+ ///
+ /// Ensures all supported capabilities are enabled in this connection.
+ /// Reconnects and reauthenticates if necessary.
+ ///
+ /// Whether the client has been newly created.
+ private async Task EnsureCapabilitiesAsync(ImapClient client, bool isCreatedNew)
{
try
{
- await EnsureConnectedAsync(client);
-
+ bool isReconnected = await EnsureConnectedAsync(client);
+
bool mustDoPostAuthIdentification = false;
- if (isCreatedNew && client.IsConnected)
+ if ((isCreatedNew || isReconnected) && client.IsConnected)
{
// Activate supported pre-auth capabilities.
if (client.Capabilities.HasFlag(ImapCapabilities.Compress))
@@ -106,7 +111,7 @@ namespace Wino.Core.Integration
await EnsureAuthenticatedAsync(client);
- if (isCreatedNew && client.IsAuthenticated)
+ if ((isCreatedNew || isReconnected) && client.IsAuthenticated)
{
if (mustDoPostAuthIdentification) await client.IdentifyAsync(_implementation);
@@ -147,14 +152,14 @@ namespace Wino.Core.Integration
if (_clients.TryPop(out ImapClient item))
{
- await EnsureConnectivityAsync(item, false);
+ await EnsureCapabilitiesAsync(item, false);
return item;
}
var client = CreateNewClient();
- await EnsureConnectivityAsync(client, true);
+ await EnsureCapabilitiesAsync(client, true);
return client;
}
@@ -224,9 +229,10 @@ namespace Wino.Core.Integration
_ => SecureSocketOptions.None
};
- public async Task EnsureConnectedAsync(ImapClient client)
+ /// True if the connection is newly established.
+ public async Task EnsureConnectedAsync(ImapClient client)
{
- if (client.IsConnected) return;
+ if (client.IsConnected) return false;
client.ServerCertificateValidationCallback = MyServerCertificateValidationCallback;
@@ -249,6 +255,9 @@ namespace Wino.Core.Integration
WriteToProtocolLog($"Supported authentication mechanisms: {string.Join(", ", supportedAuthMethods)}");
}
}
+
+ return true;
+
}
private void WriteToProtocolLog(string message)