Pregunta

Intenté lograr esto a través de una llamada de MailMessage.Headers.Set, en VB.net. Vea abajo:

    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)

Confirmé que la llamada objMail.Headers.Set está realmente funcionando; si obtengo el valor posteriormente, se habrá cambiado con éxito. Mi problema es que cuando recibo el correo electrónico en el Outlook de TEST_EMAIL_ADDRESS, la fecha es 2009 en todas partes, no en 1999. Ahí mismo, en la interfaz de Outlook, y también en el encabezado, al que accedo a través de las "Opciones". elemento en el menú contextual para ese correo electrónico.

¿Qué estoy haciendo mal? Tengo la sensación de que me he perdido algo obvio ...

Para ser claros: no hago esto con intenciones maliciosas. Estoy trabajando en un componente de integración de correo electrónico que utiliza ambos UID y un " Último procesado " Fecha para ubicar el primer e-mail nuevo a integrar. Quiero probar casos en los que múltiples correos electrónicos tengan exactamente la misma fecha / hora, ya que el módulo de integración de correo electrónico debe manejar esas situaciones sin problemas. Si pudiera falsificar la fecha de esta manera, podría enviar tantos correos electrónicos como quisiera que coincidan con una fecha / hora determinada, en lugar de intentar enviarlos con un script automatizado, esperando que todos se reciban en el mismo segundo . Parece que tendré que tomar otro enfoque, sin embargo.

¿Fue útil?

Solución

Agregando a la nota de @Lasse V. Karlsen, creo que lo más probable es que el servidor SMTP esté anulando lo que usted escribe en el mensaje en el código. Honestamente, ¿por qué necesitarías hacer que un correo electrónico pareciera que fue enviado en el pasado? No puedo pensar en una sola razón que no sea deshonesta al menos o maliciosa en el peor de los casos.

Por lo tanto, tendría sentido para mí que el servidor sobrescribiera este encabezado si parecía sospechoso. No sé si eso es lo que realmente está sucediendo, pero apostaría a que @Lasse V. Karlsen tiene razón.

Si es así, una posible solución sería cambiar la fecha en el servidor SMTP a alguna fecha en el pasado (si controla el servidor y puede hacerlo).

Aún así, me pregunto por qué querrías hacer esto. ¿Puedes elaborar?

Agregado

@Lasse V. Karlsen: creo que deberías publicar tu nota como la respuesta para obtener el crédito por ella.

Otros consejos

El valor del encabezado se sobrescribe en la clase de mensajes cuando se preparan los encabezados:

this.Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.Date), MailBnfHelper.GetDateTimeString(DateTime.Now, null));

La razón por la que estoy intentando (sin éxito) establecer este valor es porque necesito saberlo para un encabezado calculado diferente. Supongo que "suficientemente cerca" Habrá que hacer.

Puedes agregar encabezados personalizados a la propiedad de encabezado; Sin embargo, no a pocos encabezados reservados, incluyendo la fecha. La documentación indica que el valor personalizado para encabezados restringidos se descartará o se sobrescribirá más here en MSDN

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top