【发布时间】:2019-12-19 17:36:49
【问题描述】:
我正在使用 Mailkit v2.2.0 从使用 IMAP 的交换服务器检索电子邮件。首先,我阅读邮件并处理它们,然后它们将被删除——如果有必要的话。因此,我在短时间内两次连接到 IMAP 服务器。
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 不行。
第一次连接成功,第二次连接失败。
第二次连接异常:
An error occurred while attempting to establish an SSL or TLS connection.我同时使用端口 993 和
SecureSocketOptions.SslOnConnect。
【问题讨论】:
-
我发现,是否打开收件箱并没有什么不同。即使只是建立连接并立即关闭它也会重现问题。
-
您是否考虑过保持 ImapClient 连接处于活动状态而不是不断连接和断开连接?
-
是的。最初,这两个操作都打算成为一个封闭的操作,但如果这不起作用,我必须考虑保持连接打开。
-
我认为这将是你最好的选择。
标签: c# exchange-server imap mailkit