如何从.NET发送过去日期的电子邮件?

Mat*_*ghi 6 c# vb.net email header

我尝试通过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)
Run Code Online (Sandbox Code Playgroud)

我确认objMail.Headers.Set调用实际上正在工作 - 如果我之后获得了值,它已成功更改.我的问题是,当我在TEST_EMAIL_ADDRESS的Outlook中收到电子邮件时,日期是2009年的所有地方,而不是1999年.就在Outlook界面中,也在标题中,我通过上下文中的"选项"项访问该电子邮件的菜单.

我究竟做错了什么?我有一种感觉我错过了一些明显的东西......

要明确:我不是故意这样做的.我正在开发一个电子邮件集成组件,它利用UID和"上次处理"日期来定位要集成的第一个新电子邮件.我想测试多个电子邮件具有完全相同的日期/时间的情况 - 因为电子邮件集成模块应该完美地处理这些情况.如果我可以简单地用这种方式伪造日期,我可以发送尽可能多的与特定日期/时间相匹配的电子邮件,而不是尝试使用自动脚本发送它们 - 希望它们都能在同一秒内收到.但是,我似乎需要采取另一种方法.

Dav*_*vid 2

添加到 @Lasse V. Karlsen 的注释中,我认为 SMTP 服务器很可能会覆盖您在代码中放入消息中的内容。老实说,为什么您甚至需要让电子邮件看起来像是过去发送的呢?我想不出有什么理由至少不是不诚实的,或者最坏的情况是恶意的。

因此,如果服务器看起来可疑,服务器会覆盖此标头,这对我来说是有意义的。我不知道这是否是实际发生的情况,但我敢打赌@Lasse V. Karlsen 是正确的。

如果是这样,一个可能的解决方案是将 SMTP 服务器上的日期更改为过去的某个日期(如果您控制服务器并且能够这样做)。

不过,我想知道你为什么要这样做。你能详细说明一下吗?

添加

@Lasse V. Karlsen - 我认为你应该将你的笔记作为答案发布,这样你就可以得到它的荣誉。

  • 我正在开发一个电子邮件集成组件,该组件利用 UID 和“上次处理”日期来定位要集成的第一封新电子邮件。我想测试多封电子邮件具有完全相同的日期/时间的情况 - 因为电子邮件集成模块应该完美地处理这些情况。如果我可以简单地伪造这样的日期,我可以发送任意数量的与特定日期/时间匹配的电子邮件,而不是尝试使用自动脚本发送它们 - 希望它们都能在同一秒内收到。 (3认同)