微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MailKit C#SmtpClient.Connect到s​​mtp.Office365.com引发异常:“根据验证过程,远程证书无效”

如何解决MailKit C#SmtpClient.Connect到s​​mtp.Office365.com引发异常:“根据验证过程,远程证书无效”

我正在使用MailKit(1.18.0版),并且在连接到SMTP Office 365时遇到以下错误

SmtpClient client = new SmtpClient();

连接方法

client.Connect("smtp.Office365.com",587,true);

错误消息:“由于意外的数据包格式,握手失败”

我在网上搜索了这种情况,发现很少有人通过使用useSSL false值来解决该问题。因此,然后我尝试为useSSL传递false,但收到无效的远程证书错误

client.Connect("smtp.Office365.com",false);

错误消息:“根据验证过程,远程证书无效。”

再次研究之后,发现我们应该尝试使用不同的重载方法来与启动TLS连接。

client.Connect("smtp.Office365.com",SecureSocketoptions.StartTls);

错误消息:“根据验证过程,远程证书无效。”

如果我在同一台服务器上运行以下Powershell,则工作正常。它发送电子邮件没有问题。

$emailFrom = "from@example.com"
$emailto = "to@example.com"
$Subject = "Test SMTP"
$Body = "Test from Server"
$SMTPServer = "smtp.office365.com"
$SMTPClient = New-Object Net.Mail.SMTPClient($SMTPServer,587)
$SMTPClient.enablessl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("username","password")
$SMTPClient.Send($EmailFrom,$EmailTo,$Subject,$Body)

我也在端口25上尝试了上述操作,但遇到了同样的问题。仅对于使用MailKit的smtp.Office365.com主机会发生此问题。 任何帮助或建议,将不胜感激。

解决方法

使用以下代码:

client.ServerCertificateValidationCallback = (s,c,ch,e) => true;
client.Connect("smtp.Office365.com",587,SecureSocketOptions.StartTls);
,

它也可以使用下面的代码工作。

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.0/umd/react-dom.production.min.js"></script>

<div id="react"></div>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。