Почему письма, отправленные .NET SmtpClient, отсутствуют Message-Id?

Это мои настройки SMTP в App.Config:

<system.net>
    <mailSettings>
      <smtp from="Reminder &lt;[email protected]&gt;">
        <network host="mail.myserver.net" port="587" password="my password" userName="[email protected]" 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>");

Но этот идентификатор не является допустимым идентификатором сообщения, и я по-прежнему получаю отрицательный счет спама. Любая идея, почему это происходит?

Это то, что у меня есть в Thunderbird:
хост: mail.korax.net/
аутентификация: обычный пароль /
порт: 587/
безопасность: STARTTLS

Ответ 1

Ваш SMTP-сервер должен быть настроен на автоматическое включение идентификатора сообщения. Если вы создаете свой собственный идентификатор, он должен следовать RFC 2822 Раздел 3.6.4.

Ответ 2

См. также эту статью:

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

У меня была такая же проблема. System.Net.Mail не будет автоматически добавлять идентификатор сообщения. Но вы можете так:

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