身份验证尝试使用 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"类型的异常,但未在用户代码中处理
其他信息:由于意外的数据包格式,握手失败。
尝试使用 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客户端。