身份验证尝试使用 MailKit 连接到邮件服务器时的异常

本文关键字:邮件服务器 异常 连接 MailKit 身份验证 | 更新日期: 2023-09-27 18:33:02

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

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

其他信息:根据 验证过程。

谷歌这个会带出很多关于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.Private.Networking.dll中发生了"System.IO.IOException"类型的异常,但未在用户代码中处理

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

身份验证尝试使用 MailKit 连接到邮件服务器时的异常

尝试使用 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;
}

我在尝试将MailKit与Gmail一起使用时遇到了完全相同的错误,并发现默认情况下,来自Avast防病毒软件的邮件已激活"扫描SSL连接"。确保将其关闭

据我所知,Avast将"打开">邮件,扫描它是否有任何病毒,然后使用它自己的证书对其进行签名,这样邮件就不会再由gmail的证书签名,从而产生该错误:

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

其他信息:根据验证过程,远程证书无效。

解决方案 1:

  • 关闭防病毒软件(或整个邮件防护(的 SSL 扫描。

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

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