Domanda

Ho provato a farlo tramite una chiamata MailMessage.Headers.Set, in VB.net. Vedi sotto:

    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)

Ho confermato che la chiamata objMail.Headers.Set funziona davvero - se in seguito ottengo il valore, è stato modificato con successo. Il mio problema è che quando ricevo l'e-mail in Outlook di TEST_EMAIL_ADDRESS, la data è 2009 ovunque, non 1999. Proprio lì nell'interfaccia di Outlook, e anche nell'intestazione, a cui accedo tramite l'opzione " Opzioni " voce nel menu contestuale per quell'e-mail.

Cosa sto facendo di sbagliato? Ho la sensazione di aver perso qualcosa di ovvio ...

Per essere chiari: non sto non con intenzioni maligne. Sto lavorando su un componente di integrazione e-mail che utilizza sia gli UID sia un "Ultimo elaborato" data per individuare la prima nuova e-mail da integrare. Voglio testare casi in cui più e-mail hanno la stessa data / ora esatta, poiché il modulo di integrazione e-mail dovrebbe gestire queste situazioni in modo impeccabile. Se potessi semplicemente falsificare la data in questo modo, potrei inviare tutte le e-mail che desideravo che corrispondano a una determinata data / ora, piuttosto che provare a inviarle con uno script automatizzato - sperando che vengano ricevute tutte nello stesso secondo . Sembra che dovrò prendere un altro approccio, però.

È stato utile?

Soluzione

Aggiungendo alla nota di @Lasse V. Karlsen, penso che molto probabilmente il server SMTP sta sovrascrivendo ciò che hai inserito nel messaggio nel codice. In tutta onestà, perché dovresti persino fare in modo che un'e-mail sembri inviata in passato? Non riesco a pensare a un solo motivo che non sia disonesto o maligno nel peggiore dei casi.

Quindi, avrebbe senso per me che il server sovrascrivesse questa intestazione se sembrasse sospetto. Non so se questo è ciò che sta realmente accadendo, ma scommetto che @Lasse V. Karlsen è corretto.

In tal caso, una possibile soluzione sarebbe quella di modificare la data sul server SMTP in una data precedente (se si controlla il server e si è in grado di farlo).

Tuttavia, mi chiedo perché vorresti farlo. Puoi elaborare?

Aggiunto

@Lasse V. Karlsen - Penso che dovresti pubblicare la tua nota come risposta in modo da ottenere il merito.

Altri suggerimenti

Il valore dell'intestazione viene sovrascritto nella classe Message durante la preparazione delle intestazioni:

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

Il motivo per cui sto provando (senza successo) a impostare questo valore è perché devo conoscerlo per un'intestazione calcolata diversa. Suppongo che "abbastanza vicino" dovrà fare.

Puoi aggiungere intestazioni personalizzate alla proprietà Header; tuttavia, non per alcune intestazioni riservate, inclusa la data. La documentazione afferma che il valore personalizzato per le intestazioni limitate verrà scartato o sovrascritto leggi di più qui su MSDN

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top