2009-09-10 15 views
5

He intentado lograr esto a través de una llamada MailMessage.Headers.Set, en VB.net. Ver más abajo:¿Cómo puedo enviar un correo electrónico con una fecha pasada de .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) 

me confirmó que la llamada objMail.Headers.Set está trabajando realmente - si me da el valor más tarde, se ha cambiado correctamente. Mi problema es que cuando recibo el correo electrónico en Outlook de TEST_EMAIL_ADDRESS, la fecha es 2009 en todas partes, no en 1999. Allí mismo, en la interfaz de Outlook, y también en el encabezado, al que accedo mediante el elemento "Opciones" en el contexto menú para ese correo electrónico.

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

Para ser claro: Estoy no haciendo esto con intención maliciosa. Estoy trabajando en un componente de integración de correo electrónico que utiliza tanto UID como una fecha de "Último procesamiento" para ubicar el primer correo electrónico nuevo que se integrará. Quiero probar casos en los que varios correos electrónicos tienen exactamente la misma fecha/hora, ya que el módulo de integración de correo electrónico debe manejar esas situaciones de manera impecable. Si pudiera simplemente 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 tratar de enviarlos con un script automático, con la esperanza de que todos sean recibidos en el mismo segundo . Parece que necesitaré tomar otro enfoque, sin embargo.

+9

Probablemente sea anulado por los servidores en cuestión, que registra el momento en que reciben el mensaje, en lugar de cuando el mensaje dice que fue enviado . –

+0

Creo que olfatear la red ayudaría. O al menos registro adicional en su servidor SMTP –

+0

@Lasse V. Karlsen Como dijo David Stratton, debe agregar ese comentario como respuesta. Que tiene sentido. Tendré que pensar en un mejor enfoque. –

Respuesta

2

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

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 que @Lasse V. Karlsen está en lo cierto.

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

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

Agregado

@Lasse V. Karlsen - creo que debería publicar tu nota como la respuesta que pueda obtener el crédito por ello.

+3

Estoy trabajando en un componente de integración de correo electrónico que utiliza tanto UID como una fecha de "Último procesamiento" para ubicar el primer correo electrónico nuevo que se integrará. Quiero probar casos en los que varios correos electrónicos tienen exactamente la misma fecha/hora, ya que el módulo de integración de correo electrónico debe manejar esas situaciones de manera impecable. Si pudiera simplemente falsificar la fecha de esa 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 automático, con la esperanza de que todos sean recibidos en el mismo segundo . –

+0

Tendré que encontrar una forma mejor de hacer esto, parece. –

+0

+1 al comentarista para la prueba! Puede haber una manera de generar o burlarse de los mensajes de correo para el componente de integración para que no tenga que enviarlos realmente a través del servidor de correo para probar esa parte. Todavía podría realizar pruebas de integración con el servidor de correo en su lugar, pero estas pruebas particulares podrían funcionar mejor como pruebas unitarias aisladas. – TrueWill

0

El valor de la cabecera se sobrescribe en la clase de mensaje en la preparación de 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 una cabecera calculado diferente . Creo que "lo suficientemente cerca" tendrá que hacer.

+1

No tengo claro cómo se aplica esta respuesta a la pregunta? – Krease

1

Puede agregar encabezados personalizados a la propiedad Encabezado; sin embargo, no a algunos encabezados reservados, incluida la Fecha. La documentación indica que el valor personalizado para encabezados restringidos se descartará o sobrescribirá lea más here en MSDN

Cuestiones relacionadas