使用MailKit连接到邮件服务器时,AuthenticationException

时间:2016-02-03 18:42:36

标签: c# mailkit

我正在使用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中但未在用户代码中处理

     

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

2 个答案:

答案 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:

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

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

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