【问题标题】:AuthenticationException when tryign to connect to mail server using MailKit尝试使用 MailKit 连接到邮件服务器时出现 AuthenticationException
【发布时间】:2016-02-28 06:26:52
【问题描述】:

我正在使用MailKit 尝试通过交换服务器通过 SMTP 发送电子邮件,但是当我尝试连接时出现以下错误:

类型异常 'System.Security.Authentication.AuthenticationException' 发生在 MailKit.dll 但未在用户代码中处理

附加信息:根据远程证书无效 验证程序。

通过 Google 搜索这会带来很多关于 Gmail 的内容或作为其他错误消息的一部分(如 FTP 或 Web api 请求等)。我已经和 IT 人员谈过了,它不是自签名证书,我们不需要身份验证(事实上,我管理的 BugZilla 实例设置了相同的设置并且工作正常)。我做错了什么或如何获取更多详细信息以进一步排除故障?

using (var Client = new SmtpClient())
{
    Client.Connect("mail.address.com", 587, false);
    Client.AuthenticationMechanisms.Remove("XOAUTH2");
    Client.Send(Message);
    Client.Disconnect(true);
}

编辑:我已与 IT 部门核实,它与托管 mail.address.com domain 以及交换的 IIS 中使用的证书相同。我也将它安装为受信任的根,但仍然出现相同的错误。

编辑 2:如果我将代码更新为 Client.Connect("mail.address.com", 587, true);,则会收到错误消息:

“System.IO.IOException”类型的异常发生在 >System.Private.Networking.dll 中,但未在用户代码中处理

附加信息:由于意外的数据包格式,握手失败。

【问题讨论】:

    标签: c# mailkit


    【解决方案1】:

    尝试使用Client.Connect("mail.address.com", 587, SecureSocketOptions.None); 禁用 STARTTLS。

    如果您想保留 STARTTLS,可以尝试覆盖 Client.ServerCertificateValidationCallback

    获取有关错误的更多信息的最简单方法是使用以下内容覆盖ServerCertificateValidationCallback

    bool ValidateRemoteCertificate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
        Console.WriteLine ("SslPolicyErrors: {0}", sslPolicyErrors);
    
        return sslPolicyErrors == SslPolicyErrors.None;
    }
    

    【讨论】:

    • 这不是允许所有证书通过并将其暴露为安全风险吗?
    • 只有当你总是返回true,即使有错误。
    • 禁用 STARTTLS 的风险有多大?
    • 视情况而定。由于您没有进行身份验证,因此您不必担心您的用户/密码被窥探,但您的电子邮件仍然会以明文形式发送。所以问题是你是否觉得有必要在邮件传输到邮件服务器时对其进行加密,以防有任何黑客试图窥探它们。
    • 谢谢,我认为这没什么大不了的,但我想我会仔细检查一下。设置 SecureSocketOptions.None 消除了该错误,但现在我遇到了身份验证错误。
    【解决方案2】:

    我在尝试将 MailKit 与 Gmail 一起使用时遇到了完全相同的错误,并发现默认情况下,来自 Avast 防病毒软件的 Mail Shield 具有 “扫描 SSL连接” 激活。请务必将其关闭

    据我所知,Avast 会“打开”邮件,扫描邮件中是否存在病毒,然后使用自己的证书对其进行签名,这样邮件就不会被签名通过 gmail 的证书不再产生该错误:

    MailKit.dll 中出现“System.Security.Authentication.AuthenticationException”类型的异常,但未在用户代码中处理。

    附加信息:根据验证程序,远程证书无效。

    解决方案 1:

    • 从您的防病毒软件(或整个邮件防护罩)中关闭 SSL 扫描。

    解决方案 2(应该是最好的安全方案):

    • 以某种方式获取防病毒软件使用的证书(Avast 可以选择导出它)
    • 在连接到 gmail 服务器之前将其导入 imap/pop/smtp 客户端。

    【讨论】:

      猜你喜欢
      • 2016-03-09
      • 2016-11-16
      • 2017-04-27
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 2023-04-02
      • 2018-03-25
      相关资源
      最近更新 更多