.NET から過去の日付を含む電子メールを送信するにはどうすればよいですか?
質問
VB.net で MailMessage.Headers.Set 呼び出しを介してこれを実現しようとしました。以下を参照してください:
Dim objMail As MailMessage
Dim objSMTPClient As SmtpClient
objMail = New MailMessage()
objSMTPClient = New SmtpClient()
objMail.From = New MailAddress(MY_EMAIL_ADDRESS)
objMail.To.Add(New MailAddress(TEST_EMAIL_ADDRESS))
objMail.Headers.Set("Date", "09 Jan 1999 17:23:42 -0400")'date in the past'
objMail.Subject = "The Subject"
objMail.Body = "The Body"
objSMTPClient.Port = 25
objSMTPClient.Host = HOST_IP
objSMTPClient.Credentials = New System.Net.NetworkCredential(MY_EMAIL_ADDRESS, txtPassword.Text)
objSMTPClient.Send(objMail)
objMail.Headers.Set 呼び出しが実際に機能していることを確認しました。その後値を取得できれば、正常に変更されています。私の問題は、TEST_EMAIL_ADDRESS の Outlook で電子メールを受信すると、日付がどこでも 1999 ではなく 2009 になってしまうことです。Outlook インターフェイスと、電子メールのコンテキスト メニューの [オプション] 項目からアクセスするヘッダーにあります。
私の何が間違っているのでしょうか?明らかな何かを見逃しているような気がします...
明確にしておきます:私は ない 悪意を持ってこれを行っている。私は、UID と「最終処理」日の両方を利用して、統合する最初の新しい電子メールを特定する電子メール統合コンポーネントに取り組んでいます。電子メール統合モジュールはこれらの状況を完璧に処理する必要があるため、複数の電子メールがまったく同じ日付/時刻を持つケースをテストしたいと考えています。この方法で単純に日付を偽ることができれば、自動化されたスクリプトを使用して電子メールを送信するのではなく、特定の日付/時刻に一致する電子メールを好きなだけ送信できます。すべての電子メールが同じ 1 秒以内に受信されることを期待しています。 。ただし、別のアプローチを取る必要があるようです。
解決
@Lasse V. Karlsenのメモに追加すると、おそらく、SMTPサーバーは、コードでメッセージに入力した内容を上書きしていると思います。正直なところ、なぜ過去に送信されたような電子メールを作成する必要があるのでしょうか?少なくとも不誠実ではない、または最悪の場合でも悪意のない単一の理由を考えることはできません。
したがって、疑わしいと思われる場合、サーバーがこのヘッダーを上書きするのは理にかなっています。それが実際に起こっているのかどうかはわかりませんが、@ Lasse V. Karlsenが正しいと確信しています。
その場合、可能な解決策は、SMTPサーバーの日付を過去の日付に変更することです(サーバーを制御し、それを実行できる場合)。
それでも、なぜこれをしたいのか疑問に思っています。詳しく説明してもらえますか?
追加
@Lasse V. Karlsen-回答としてメモを投稿して、クレジットを受け取るべきだと思います。
他のヒント
ヘッダーを準備するときに、ヘッダー値が Message クラスで上書きされます。
this.Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.Date), MailBnfHelper.GetDateTimeString(DateTime.Now, null));
この値を設定しようとしている(失敗している)理由は、別の計算されたヘッダーについてその値を知る必要があるためです。「十分に近い」だけで十分だと思います。
カスタムヘッダーをHeaderプロパティに追加できます。ただし、Dateを含むいくつかの予約済みヘッダーではありません。ドキュメントには、制限されたヘッダーへのカスタム値は破棄されるか上書きされると記載されています。 .110%29.aspx "rel =" nofollow "> MSDNのこちら