MailKit C# SmtpClient.Connect() 到 smtp.Office365.com 抛出异常:"The remote certificate is invalid according to the validation procedure."

MailKit C# SmtpClient.Connect() to smtp.Office365.com throwing exception: "The remote certificate is invalid according to the validation procedure."

我正在使用 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", 587, false);

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

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

client.Connect("smtp.Office365.com", 587, 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);

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

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