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

时间:2019-01-04 13:59:58

标签: c# windows-server-2008-r2 tls1.2 mailmessage

仅在Windows Server 2008 R2上,在端口465(tls1.2)上发送认证邮件(System.Web.Mail.MailMessage)失败

我有一个基于框架4.5的功能,但它使用旧的库(System.Web.Mail.MailMessage)通过端口465上的smtp服务器发送电子邮件(认证邮件tls1.2),该功能正常运行在Windows 10和Windows Server 2012上运行,但在Windows Server 2008 R2上运行失败。该错误的类型为System.Web.HttpException,表明它无法访问服务器,但是在端口465上进行telnet工作。 Windows Server 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)传输无法连接到服务器

1 个答案:

答案 0 :(得分:-2)

我通过启用this指南后面的tls1.2解决了问题 要么  this由Imantas提出

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols下 在TLS 1.2文件夹中添加文件夹TLS 1.2,在TLS 1.2文件夹中添加子文件夹Client和Subfolder Server,在这两个文件夹中,将DisabledByDefault键设置为0,将Enabled键设置为1