C# Mailkit IMAP连接第二次失败
我正在使用Mailkit v2.2.0使用IMAP从exchange服务器检索电子邮件。首先,我阅读邮件并处理它们,然后它们将被删除——如果必要的话。因此,我在短时间内连接到IMAP服务器两次C# Mailkit IMAP连接第二次失败,c#,exchange-server,imap,mailkit,C#,Exchange Server,Imap,Mailkit,我正在使用Mailkit v2.2.0使用IMAP从exchange服务器检索电子邮件。首先,我阅读邮件并处理它们,然后它们将被删除——如果必要的话。因此,我在短时间内连接到IMAP服务器两次 private ImapClient GetImapClient(MailServerConnectionString connectionString) { var client = new ImapClient(); if (connectionString.AcceptAllCer
private ImapClient GetImapClient(MailServerConnectionString connectionString) {
var client = new ImapClient();
if (connectionString.AcceptAllCertificates) {
client.ServerCertificateValidationCallback = (s, c, h, e) => true;
}
client.Connect(connectionString.Server, connectionString.Port, connectionString.Encryption);
if (connectionString.AuthenticationRequired) {
client.Authenticate(connectionString.UserName, connectionString.Password);
}
return client;
}
检索邮件:
using (var client = GetImapClient(config.ImapConnectionString)) {
var inbox = client.Inbox;
inbox.Open(FolderAccess.ReadWrite);
var items = inbox.Fetch(0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.Size | MessageSummaryItems.Flags);
foreach (var item in items) {
var message = inbox.GetMessage(item.UniqueId);
var mail = message.Convert(includeAttachments);
mail.Seen = item.Flags?.HasFlag(MessageFlags.Seen) ?? false;
mail.UniqueId = item.UniqueId.Id;
result.Add(mail);
inbox.AddFlags(item.UniqueId, MessageFlags.Seen, true);
}
inbox.Close();
client.Disconnect(true);
}
处理完邮件后,将其删除:
using (var client = GetImapClient(config.ImapConnectionString)) {
var inbox = client.Inbox;
inbox.Open(FolderAccess.ReadWrite);
inbox.AddFlags(ids, MessageFlags.Deleted, true);
inbox.Expunge();
client.Disconnect(true);
}
很高兴知道:
hMailServer一切正常,但MS Exchange没有
第一个连接工作,第二个连接失败
第二个连接上出现异常:尝试建立SSL或TLS连接时出错
我两次都在使用端口993和SecureSocketOptions.SslOnConnect
此异常表示System.Net.Security.SslStream.AuthenticateAcclient失败
SslStream可能无法连接到证书颁发机构以检查服务器证书的吊销状态
若要禁用证书吊销检查,可以在连接之前将client.checkCertificateReciation属性设置为false
Exchange服务器也可能被配置为限制来自同一IP地址的频繁连接,以抵御DoS攻击。要处理这种可能性,您需要保持ImapClient连接处于活动状态,即像您正在做的那样在短时间内停止使用ImapClient,或者在重新连接之间等待更长的时间。此异常意味着System.Net.Security.SslStream.AuthenticateTasClient失败
SslStream可能无法连接到证书颁发机构以检查服务器证书的吊销状态
若要禁用证书吊销检查,可以在连接之前将client.checkCertificateReciation属性设置为false
Exchange服务器也可能被配置为限制来自同一IP地址的频繁连接,以抵御DoS攻击。要处理这种可能性,您需要保持ImapClient连接处于活动状态,即像您正在做的那样在短时间内停止使用ImapClient,或者在重新连接之间等待更长的时间。我发现,打开或不打开收件箱都没有什么区别。即使只是建立连接并立即关闭它也会产生问题。您是否考虑过保持ImapClient连接的活动状态,而不是不断地连接和断开连接?是的。最初,这两个操作都打算是一个封闭的动作,但是如果这不起作用,我必须考虑保持连接打开。我想这将是你最好的选择。我想,如果我打开收件箱,也不会有什么区别。即使只是建立连接并立即关闭它也会产生问题。您是否考虑过保持ImapClient连接的活动状态,而不是不断地连接和断开连接?是的。最初,这两个操作都打算是一个封闭的动作,但如果这不起作用,我必须考虑保持连接打开。我认为这将是你最好的。clit.Cuffic证书撤销= FALSE没有改变任何东西,不幸的是。我发现,这种行为类似于这个问题client.CheckCertificationRevocation=false,不幸的是,它没有改变任何东西。我发现,这种行为与这个问题类似