Я попытался сделать это с помощью вызова MailMessage.Headers.Set в VB.net. Смотрите ниже:
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 действительно работает - если впоследствии я получу значение, оно будет успешно изменено. Моя проблема заключается в том, что когда я получаю электронное письмо в Outlook TEST_EMAIL_ADDRESS, дата везде 2009, а не 1999. Прямо там, в интерфейсе Outlook, а также в заголовке, к которому я получаю доступ через элемент «Параметры» в контексте меню для этой электронной почты.
Что я делаю не так? У меня такое чувство, что я упустил что-то очевидное ...
Чтобы было ясно: я не делаю это со злым умыслом. Я работаю над компонентом интеграции электронной почты, который использует как UID, так и дату «последней обработки», чтобы найти первое новое электронное письмо для интеграции. Я хочу протестировать случаи, когда несколько писем имеют одинаковую дату / время - поскольку модуль интеграции электронной почты должен безупречно справляться с этими ситуациями. Если бы я мог просто подделать дату таким образом, я мог бы отправлять столько электронных писем, сколько я хотел, которые соответствуют определенной дате / времени, вместо того, чтобы пытаться отправить их с помощью автоматического сценария - надеясь, что все они будут получены в течение одной секунды , Кажется, мне нужно будет использовать другой подход.