【发布时间】:2019-11-22 06:53:41
【问题描述】:
我在 Microsoft 网站上看到 SmtpClient 已过时,他们建议使用 MailKit 来替代它。
我正在编写一个使用 MailKit 的应用程序。
这是我目前所拥有的:
// *************** SEND EMAIL *******************
using (var client = new MailKit.Net.Smtp.SmtpClient())
{
//accept all SSL certificates
client.ServerCertificateValidationCallback = (s, c, h, e) => true;
client.Connect(emailSettings.SmtpServer, emailSettings.SmtpPort, emailSettings.IsSslEnabled);
if (emailSettings.IsAuthenticationRequired)
{
// Note: only needed if the SMTP server requires authentication
client.Authenticate(emailSettings.SmtpUsername, emailSettings.SmtpPassword);
}
// timeout = 20 seconds
client.Timeout = 20000;
client.Send(message);
client.Disconnect(true);
}
当我设置这部分时:
client.Connect(emailSettings.SmtpServer, emailSettings.SmtpPort, emailSettings.IsSslEnabled);
最后一个参数是bool useSSL,我设置为true。我的电子邮件服务器由 Rackspace 托管,所以我知道它使用 SSL。当我将此选项设置为 true 时,发送失败,但如果我将此选项设置为 false,则发送正常。
此行不应该捕获证书类型吗:
client.ServerCertificateValidationCallback
如果是这样,为什么连接上的useSSL 不起作用?我需要将useSSL 设置为false 吗?当我有上面的行时,我对useSSL 的工作方式感到困惑。
【问题讨论】:
-
“此行不应该捕获证书类型” 是的,除非它永远不会走到这一步。