我正在使用MailKit
尝试通过SMTP通过Exchange服务器发送电子邮件但是当我尝试连接时出现以下错误:
类型的例外 ' 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确认它与IIS中使用的托管mail.address.com domain
以及交换的证书相同。我还将它安装为受信任的root,但仍然会收到相同的错误。
编辑2:如果我将代码更新为Client.Connect("mail.address.com", 587, true);
,那么我收到错误:
类型' System.IO.IOException'的例外情况发生在> System.Private.Networking.dll中但未在用户代码中处理
其他信息:由于意外的数据包格式,握手失败。
答案 0 :(得分:4)
尝试使用Client.ServerCertificateValidationCallback
停用STARTTLS。
如果您想保留STARTTLS,可以尝试覆盖ServerCertificateValidationCallback
。
获取有关错误的更多信息的最简单方法是使用以下内容覆盖bool ValidateRemoteCertificate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
Console.WriteLine ("SslPolicyErrors: {0}", sslPolicyErrors);
return sslPolicyErrors == SslPolicyErrors.None;
}
:
{{1}}
答案 1 :(得分:1)
我在尝试使用 MailKit with Gmail 时遇到了完全相同的错误,并且发现默认情况下来自Avast防病毒软件的 Mail Shield 有&#34 ;扫描SSL连接" 已激活。确保关闭。
据我所知,Avast将"打开" 邮件,扫描任何病毒,然后使用它自己的证书签名所以邮件不再被gmail的证书签名而产生该错误:
类型' System.Security.Authentication.AuthenticationException'的例外情况发生在MailKit.dll中,但未在用户代码中处理。
附加信息:根据验证程序,远程证书无效。
解决方案1:
解决方案2(应该是最好的安全性说法):