Frage

Ich habe versucht, dies über einen MailMessage.Headers.Set Anruf zu erreichen, in VB.net. Siehe unten:

    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)

bestätigte ich, dass der objMail.Headers.Set Anruf tatsächlich funktioniert - wenn ich den Wert danach bekommen, es wurde erfolgreich geändert. Mein Problem ist, dass, wenn ich die E-Mail in der Outlook-TEST_EMAIL_ADDRESS erhalten, das Datum 2009 ist überall, nicht 1999 direkt in der Outlook-Oberfläche, und auch in der Kopfzeile, die ich über den Punkt „Optionen“ im Kontext zugreifen Menü für diese E-Mail.

Was mache ich falsch? Ich habe ein Gefühl, das ich etwas verpasst offensichtlich ...

Um klar zu sein: Ich bin nicht tut dies mit böswilliger Absicht. Ich arbeite an einem Integrationskomponente E-Mail, die beide UIDs und einen „Last verarbeitet“ date nutzt die erste neue E-Mail zu finden, zu integrieren. Ich möchte Fällen testen, in denen mehrere E-Mails mit der exakt gleichen Datum / Zeit - als das Integrationsmodul E-Mail fehlerlos diese Situationen umgehen sollte. Wenn ich könnte einfach fälscht das Datum auf diese Weise kann ich so viele E-Mails senden, wie ich wollte, dass entspricht eine bestimmtes Datum / Zeit, anstatt zu versuchen, sie mit einem automatisierten Skript zu schicken - in der Hoffnung werden sie alle in der gleichen Sekunde empfangen werden . Es scheint, ich werde einen anderen Ansatz nehmen müssen, though.

War es hilfreich?

Lösung

Hinzufügen auf @Lasse V. Karlsen Anmerkung, ich denke, dass die meisten wahrscheinlich der SMTP-Server überschreibt, was Sie in die Nachricht in Code zu setzen. In aller Ehrlichkeit, warum würden Sie brauchen auch eine E-Mail schauen, wie es in der Vergangenheit gesendet wurde? Ich kann nicht glauben, von einem einzigen Grunde, dass nicht unehrlich zumindest oder böswillige im schlimmsten Fall ist.

So würde es Sinn für mich, dass der Server dieser Header überschreiben würde, wenn es verdächtig aussieht. Ich weiß nicht, ob das, was tatsächlich passiert, aber ich würde wetten, dass @Lasse V. Karlsen korrekt ist.

Wenn ja, eine mögliche Lösung wäre, das Datum, an dem SMTP-Server in der Vergangenheit zu einem gewissen Zeitpunkt zu ändern (wenn Sie den Server steuern und sind in der Lage, dies zu tun).

Dennoch frage ich mich, warum Sie wollen würde auch dies zu tun. Können Sie das näher erläutern?

hinzugefügt

@Lasse V. Karlsen - Ich glaube, Sie Ihre Notiz als Antwort schreiben sollen, so dass Sie den Kredit dafür bekommen

.

Andere Tipps

Der Header-Wert wird in der Message-Klasse überschrieben wird, wenn Header vorbereiten:

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

Der Grund, dass ich versuche, (erfolglos) diesen Wert gesetzt ist, weil ich wissen müssen, um es für einen anderen berechneten Header. Ich denke, „nahe genug“ zu tun hat.

Sie können benutzerdefinierte Header an den Header-Eigenschaft hinzuzufügen; jedoch nicht auf wenige reservierte Header inklusive Datum. In der Dokumentation wird, dass benutzerdefinierte Wert beschränkt Header wird mehr lesen hier auf MSDN

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top