C# 在 Windows Server 2008 R2 上使用 System.Web.Mail 发送认证邮件时出错

C# Error sending certified mail with System.Web.Mail on Windows Server 2008 R2

在端口 465 (tls1.2) 上发送经过认证的邮件 (System.Web.Mail.MailMessage) 仅在 windows 服务器 2008 r2

上失败

我有一个基于框架 4.5 的函数,但它使用旧库 (System.Web.Mail.MailMessage) 通过端口 465 上的 smtp 服务器发送电子邮件(经过认证的邮件 tls1.2),该函数运行正常在 windows 10 和 windows 服务器 2012 上,但在 windows 服务器 2008 r2 上失败。错误是 System.Web.HttpException 类型,表明它无法连接到服务器,但在端口 465 上进行 telnet 工作。 windows 服务器 2008 r2 有什么问题?

try
{
System.Web.Mail.MailMessage newMail = new System.Web.Mail.MailMessage();
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", "server");
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", "465");
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", "2");
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "username");
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "pwd");
newMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");

newMail.From = "mail";
newMail.To = "mail";
newMail.Subject = "test web Mail";
newMail.BodyFormat = System.Web.Mail.MailFormat.Html;
newMail.Body = "body....";
newMail.Priority = System.Web.Mail.MailPriority.High;

System.Web.Mail.SmtpMail.SmtpServer = "smtpserver:465";
System.Web.Mail.SmtpMail.Send(newMail);

Console.WriteLine("Email Send");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}

System.We.HttpException (0x80004005) 传输连接服务器失败

我按照 this 指南启用 tls1.2 解决了 要么 this 伊曼塔斯建议

在 windows 服务器 2008 R2 中,如果不存在以下项,则必须通过在系统注册表中插入来启用 tls1.2 协议:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols之下 添加文件夹 TLS 1.2 并在文件夹 TLS 1.2 中添加子文件夹客户端和子文件夹服务器在两个文件夹中输入 DisabledByDefault 键设置为 0 并将 Enabled 键设置为 1