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

时间:2011-07-29 14:50:03

标签: c# .net asp.net

这是我在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中使用相同的帐户,当我使用thunderbird发送电子邮件时,Message-Id被添加到我的电子邮件中,但是从我的应用程序发送的电子邮件不会发生。

我可以手动添加标题,例如:

message.Headers.Add("Message-Id","<3BD50098E401463AA228377848493927-1>");

但是此ID不是有效的邮件ID,我仍然会得到负面垃圾邮件分数。 知道为什么会这样吗?

这就是我在Thunderbird中所拥有的:
主持人:mail.korax.net /
验证:普通密码/
港口:587 /
安全:STARTTLS

2 个答案:

答案 0 :(得分:13)

请在这里看到这篇文章:

http://jarrett.co/post/1638578964/spamassassin-vs-system-net-mail

我遇到了同样的问题。 System.Net.Mail不会自动附加Message-Id。但你可以这样:

mailMessage.Headers.Add("Message-Id",
                         String.Format("<{0}@{1}>",
                         Guid.NewGuid().ToString(),
                        "mail.example.com"));

答案 1 :(得分:9)

您的SMTP服务器必须配置为自动包含邮件ID。如果要生成自己的ID,则应遵循RFC 2822 Section 3.6.4