“使用SmtpClient,由于意外的数据包格式导致握手失败”

时间:2018-06-08 07:35:10

标签: c# .net

我使用SmtpClient发送电子邮件,如下代码:

SmtpClient client = new SmtpClient("host", 587);
client.EnableSsl = true;

client.Credentials = new System.Net.NetworkCredential("user", "pass");

MailAddress from = new MailAddress("from_mail", String.Empty, System.Text.Encoding.UTF8);

MailAddress to = new MailAddress("to_mail");
MailMessage message = new MailMessage(from, to);
message.Body = "Say hello";
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = "Testing";
message.SubjectEncoding = System.Text.Encoding.UTF8;

client.Send(message);

如果我使用.Net Framework 4.5,则会引发错误:由于意外的数据包格式,握手失败。 如果我使用.Net Framework 4.6.1,它将成功发送邮件。

请给我推荐?

2 个答案:

答案 0 :(得分:2)

可能是TLS版本问题。

如果在初始化SMTP客户端之前将System.Net.ServicePointManager.SecurityProtocol设置为使用tls1.2会发生什么?

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

答案 1 :(得分:0)

好吧,当我尝试连接到pop3电子邮件服务器时遇到了这个问题。我应该使用一种不安全的方式连接到pop3电子邮件服务器,然后轮询新电子邮件,但在不知不觉中启用了SLL,这导致了此问题。

   Pop3Client _pop3Client = new Pop3Client();
  _pop3Client.Connect(_serverAddress, _serverPort, _isSslEnabled); // _isSslEnabled was true here 

更改_isSslEnabled = false;对我有用。为了建立安全连接,您可能必须添加 KristoferA 在其答案中提到的代码行。