Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Mailkit IMAP连接第二次失败_C#_Exchange Server_Imap_Mailkit - Fatal编程技术网

C# Mailkit 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

我正在使用Mailkit v2.2.0使用IMAP从exchange服务器检索电子邮件。首先,我阅读邮件并处理它们,然后它们将被删除——如果必要的话。因此,我在短时间内连接到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没有

第一个连接工作,第二个连接失败

第二个连接上出现异常:尝试建立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,不幸的是,它没有改变任何东西。我发现,这种行为与这个问题类似