Question

J'ai essayé d'accomplir cela via un appel MailMessage.Headers.Set, en VB.net. Voir ci-dessous:

    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)

J'ai confirmé que l'appel objMail.Headers.Set fonctionnait réellement. Si j'obtiens la valeur par la suite, elle a été modifiée avec succès. Mon problème est que lorsque je reçois le courrier électronique dans Outlook de TEST_EMAIL_ADDRESS, la date est 2009 partout, pas 1999. Dans l'interface Outlook, vous pouvez également accéder à l'en-tête auquel j'accède via l'option "Options". élément dans le menu contextuel pour cet e-mail.

Qu'est-ce que je fais mal? J'ai le sentiment d'avoir manqué quelque chose d'évident ...

Soyons clairs: je ne le fais pas avec une intention malveillante. Je travaille sur un composant d'intégration de messagerie qui utilise à la fois des UID et un message "Dernier traitement". date pour localiser le premier nouveau courrier électronique à intégrer. Je souhaite tester des cas où plusieurs courriels ont exactement la même date / heure - car le module d'intégration de messagerie devrait gérer ces situations sans faille. Si je pouvais simplement simuler la date de cette façon, je pourrais envoyer autant de courriels que je le voulais correspondant à une date / heure donnée, plutôt que d'essayer de les envoyer avec un script automatisé - en espérant qu'ils seront tous reçus dans la même seconde. . Il semble que je devrai prendre une autre approche, cependant.

Était-ce utile?

La solution

Pour ajouter à la note de @Lasse V. Karlsen, je pense que le serveur SMTP annule probablement ce que vous avez mis dans le message dans le code. En toute honnêteté, pourquoi auriez-vous même besoin de faire en sorte qu'un courriel ressemble à celui qu'il a été envoyé dans le passé? Je ne peux pas penser à une seule raison qui ne soit pas malhonnête au moins ou malicieuse au pire.

Il serait donc logique que le serveur écrase cet en-tête s’il semblait suspect. Je ne sais pas si c'est ce qui se passe réellement, mais je parierais que @Lasse V. Karlsen a raison.

Si tel est le cas, une solution possible consisterait à remplacer la date du serveur SMTP par une date antérieure (si vous contrôlez le serveur et pouvez le faire).

Pourtant, je me demande pourquoi vous voudriez même faire cela. Pouvez-vous élaborer?

Ajouté

@Lasse V. Karlsen - Je pense que vous devriez poster votre note comme réponse pour en obtenir le crédit.

Autres conseils

Lors de la préparation des en-têtes, la valeur de l'en-tête est remplacée dans la classe Message:

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

La raison pour laquelle j'essaie (sans succès) de définir cette valeur est que je dois la connaître pour un en-tête calculé différent. Je suppose que " assez proche " devra faire.

Vous pouvez ajouter des en-têtes personnalisés à la propriété Header. toutefois, pas trop peu d’en-têtes réservés, y compris Date. La documentation indique que la valeur personnalisée des en-têtes restreints sera supprimée ou remplacée. En savoir plus ici sur MSDN

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top