问题描述
我正在使用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>