为什么使用.NET SmtpClient发送的电子邮件缺少Message-Id?

16

这是我的App.Config中的SMTP设置:

<system.net>
    <mailSettings>
      <smtp from="Reminder &lt;reminder@myserver.com&gt;">
        <network host="mail.myserver.net" port="587" password="my password" userName="reminder@myserver.com" enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

这是我发送电子邮件的方式:

message.SubjectEncoding = System.Text.Encoding.UTF8;
message.BodyEncoding = System.Text.Encoding.UTF8;
smtpClient.Send(message);

这个代码能够正常运行!但唯一的问题是,我的邮件被归为垃圾邮件,因为它们的头部缺少Message-Id。当我使用Thunderbird发送电子邮件时,使用同一帐户时,Message-Id会自动添加到我的邮件中,但是从我的应用程序发送的邮件没有发生同样的情况。

我可以手动添加头部信息,例如:

message.Headers.Add("Message-Id","<3BD50098E401463AA228377848493927-1>");
但是这个ID并不是一个有效的消息ID,我仍然会因此获得负面的垃圾邮件分数。 有任何想法为什么会这样发生?
这是我在Thunderbird中拥有的设置: 主机:mail.korax.net / 身份验证:普通密码 / 端口:587 / 安全性:STARTTLS
2个回答

23

12
您的 SMTP 服务器必须配置为自动包含消息 ID。如果要生成自己的 ID,则应按照 RFC 2822 第 3.6.4 节的规范进行操作。RFC 2822 Section 3.6.4

其实我已经让我的主机服务提供商来修复了,他们也确实解决了这个问题 :) 但是如果他们没有为我解决这个问题,你的解决方案是我能够采取的最佳措施 :) 谢谢。 - Tohid
之前发布的RFC链接存在问题,这里提供更新后的RFC 2822 Section 3.6.4链接。 - jonasbn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接