J'ai essayé d'accomplir ceci via un appel MailMessage.eaders.set appel, dans 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)
3 Réponses :
Ajout de la note de @lasse V. Karlsen, je pense que le serveur SMTP est le plus probable, ce que vous mettez dans le message dans le code. En toute honnêteté, pourquoi auriez-vous même besoin de faire ressembler un email à celui-ci? Je ne peux pas penser à une seule raison qui n'est pas malhonnête au moins ou malveillante au pire. P>
Alors, cela aurait un sens à moi que le serveur écraserait cet en-tête s'il avait l'air méfiant. Je ne sais pas si c'est ce qui se passe réellement, mais je parierais que @Lasse V. Karlsen est correct. P>
Si tel est le cas, une solution possible serait de modifier la date du serveur SMTP à une date de la date du passé (si vous contrôlez le serveur et que vous pouvez le faire). P>
Néanmoins, je me demande pourquoi vous voudriez même faire cela. Pouvez-vous élaborer? P>
ajouté fort> p>
@Lasse V. Karlsen - Je pense que vous devriez publier votre note comme réponse afin que vous obteniez le crédit pour cela. P>
Je travaille sur un composant d'intégration de courrier électronique qui utilise les deux UID et une date "Dernière traitée" pour localiser le premier nouvel e-mail à intégrer. Je souhaite tester les cas où plusieurs courriels ont exactement la même date / heure - comme le module d'intégration de courrier électronique doit gérer ces situations sans défaut. Si je pouvais simplement simuler la date comme celle-là, je pourrais envoyer autant de courriels que je le souhaitais que cela correspond à une certaine date / heure, 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 .
Je vais devoir trouver une meilleure façon de le faire, semble-t-il.
+1 au commentateur pour tester! Il pourrait y avoir un moyen de générer ou de se moquer des messages de messagerie pour le composant d'intégration afin de ne pas avoir à les envoyer dans le serveur de messagerie pour tester cette partie. Vous pouvez toujours faire des tests d'intégration avec le serveur de messagerie en place, mais ces tests particuliers pourraient mieux fonctionner comme des tests d'unité isolés.
Juste au cas où n'importe qui est intéressé, il apparaît que le SMTPCLIPT (pas le serveur SMTP) modifie la "date" du message lors de l'exécution de la méthode .Send ().
Il y a des raisons non malveillantes de faire cela. Un exemple: un client souhaite que le passé a envoyé des courriels de notre système pour mettre dans leurs archives de courrier électronique. Nous stockons les informations dans notre base de données. Nous pouvons reconstruire les courriels de notre base de données. Ce serait bien de pouvoir sortir avec l'e-mail avec la date historique qu'ils ont été envoyés.
Convenée Rick Paul, je tente d'exporter des messages via SMTP vers une solution d'archive. Notre département juridique (de temps à autre) doit effectuer des recherches de cette solution en utilisant des gammes de date. En conséquence, il est extrêmement important que la date du courrier électronique transféré correspond exactement à la date du courrier électronique d'origine.
La valeur d'en-tête est écrasée dans la classe de message lors de la préparation des en-têtes:
this.Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.Date), MailBnfHelper.GetDateTimeString(DateTime.Now, null));
Vous pouvez ajouter des en-têtes personnalisés à la propriété d'en-tête; Cependant, pas peu de plats réservés, y compris la date. La documentation indique que la valeur personnalisée aux en-têtes restreints sera rejetée ou écrasée en savoir plus ici sur msdn p>
Il est probablement renvoyé par les serveurs en question, qui enregistre le temps qu'ils reçoivent le message, au lieu de quand le message dit qu'il a été envoyé.
Je pense que renifler le réseau aiderait. Ou au moins une journalisation supplémentaire dans votre serveur SMTP
@Lasse V. Karlsen Comme David Stratton, vous devez ajouter ce commentaire comme une réponse. Ca a du sens. Je vais devoir penser à une meilleure approche.
+1 Maintenant que je vois votre raison, je pense que c'est une bien meilleure question.