【问题标题】:"The IMAP server has unexpectedly disconnected" using 993 port and MailKit使用 993 端口和 MailKit 的“IMAP 服务器意外断开”
【发布时间】:2017-07-06 15:59:15
【问题描述】:

我最近将我的代码移动到 MailKit 库,因为我使用的是 S22.Imap,但我发现维护不是那么好。

我之前通过 143 和 993 与自己的邮件服务器连接,但无法通过 993 和 MailKit 连接。

它只是说“IMAP 服务器已意外断开连接”。它甚至没有达到 Authenticate 方法,并且日志唯一显示“已连接到 imap://mail.xxx.com:993/”。

我目前正在使用

imap.Connect(hostname, 993, SecureSocketOptions.None);

我什至尝试过使用不同的 SecureSocketOptions,但没有成功。知道有什么问题吗?如果我通过 143 连接,并且在我使用 S22.Imap 时,它通过 993 工作正常。

P.S:它抛出的异常是MailKit.Net.Imap.ImapProtocolException

谢谢。

【问题讨论】:

  • 很可能,客户端中的 SSL 设置不正确。 993 通常需要 TLS。

标签: c# .net imap mailkit


【解决方案1】:

我得到了它的工作:

this._imap = new ImapClient();
this._imap.Connect(configuration.GetSection("MailSettings")["ImapServer"], 993, true);
this._imap.AuthenticationMechanisms.Remove("XOAUTH2");
this._imap.Authenticate(["ImapUser"], ["ImapPassword"]);

【讨论】:

    【解决方案2】:

    端口 993 是 SSL 封装的端口,因此您需要使用:

    imap.Connect(hostname, 993, SecureSocketOptions.SslOnConnect);
    

    对于端口 143,您可能希望使用:

    imap.Connect(hostname, 143, SecureSocketOptions.StartTlsWhenAvailable);
    

    【讨论】:

    • 感谢您的回复,@jstedfast。如果我使用 StartTlsWhenAvailable 属性,它会抛出“远程证书对认证程序无效”,这就是我保留 .None 的原因。当我使用 SslOnConnect 时出现同样的错误。有任何想法吗?它使用另一个库通过该端口工作过一次,所以......到底是什么!谢谢!
    • 您需要将client.ServerCertificateValidationCallback 设置为可以验证服务器证书的内容。您的机器不信任您的 IMAP 服务器,因为它的证书可能未由受信任的 CA 签名。
    • 出于演示目的,您可以这样做:client.ServerCertificateValidationCallback = (s,c,h,e) => true;
    • 感谢您的回复。哇!
    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 2017-11-02
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 2015-02-21
    相关资源
    最近更新 更多