2012-05-27 3 views
6

Mit dem SmtpClient und MailMessage classes in. NET, um E-Mails über einen lokalen Mail-Server (hMailServer) zu senden, habe ich derzeit keine Möglichkeit gefunden, den Message-ID Header-Wert einer gesendeten Nachricht zu erhalten.Kann die "Message-ID" einer mit SmtpClient gesendeten E-Mail-Nachricht erfasst werden?

Die Idee hinter

Ich versuche programmatisch Nachrichten zu verfolgen, die nicht zustellbar sind, so habe ich einen Weg finden, die Antworten des Ziel-SMTP-Server, der eine bestimmte Nachricht ablehnt zu identifizieren.

Jetzt dachte ich einfach daran, den SMTP-Header-Wert Message-ID zu erinnern und eingehende Mails für diese ID zu analysieren.

Ich habe versucht, die Headers collection nach dem Senden der Nachricht zu überprüfen, aber ich habe keine Message-ID gefunden.

Meine Frage

Ist es möglich, den Message-ID Header-Wert zu erhalten, die meine SMTP-Server beim Senden eines MailMessage Instanz hinzufügt?

-Update 2012-05-27

Per this example ich erfolgreich manuell versucht haben, einen Message-ID auf meinem eigenen zu erzeugen, gerade vor dem Senden.

Alle meine Beispiele arbeiten so weit, so dass es scheint , dass dies eine Lösung für meine Frage ist.

+1

Ich bin ziemlich sicher, dass die ID vom SMTP-Server zugewiesen wird, und das SMTP-Protokoll nicht angibt, diesen Wert zurück an den Client zu senden. Eine Möglichkeit wäre, die gleiche Nachricht an ein Konto zu senden, das Sie steuern, und die Nachrichten-ID aus dieser Nachricht zu extrahieren. Angenommen, die Nachrichten-ID wird beim ersten SMTP-Server einmal generiert. Eine andere Möglichkeit besteht darin, der E-Mail ein benutzerdefiniertes "X-Tag" hinzuzufügen. –

+0

Danke, @ JeremyHolovacs - Ich habe bereits versucht, ein benutzerdefiniertes Tag hinzuzufügen (nicht mit "X-" Präfix, aber es scheint, dass dieses Tag beim Weiterleiten oder Beantworten der Nachricht verloren geht). –

+1

Leider per http://stackoverflow.com/questions/7095104/how-to-confirm-that-mail-has-been-de- oder nicht gibt es keine kugelsichere Methode dafür. –

Antwort

2

Die Standardlösung für Ihr Problem ist VERP. Lesen Sie Bernsteins Originalartikel, um herauszufinden, warum Message-Id et al. sind nicht zuverlässig. http://cr.yp.to/proto/verp.txt

+1

Versuchen, herauszufinden, wie VERP mit GMail zu tun ist ... Kann nicht mit Plus-Adressen senden, da GMail mit der E-Mail auf dem authentifizierten Konto überschreibt (auch wenn Ihre Plus-Adresse auf der authentifizierten E-Mail-Adresse basiert). – MikeJansen

+1

@MikeJansen: Wenn Sie eine Frage haben, schreiben Sie eine Frage. – tripleee

+1

Entschuldigung, nicht sicher, warum ich diesen Kommentar gepostet habe. Kann nicht wirklich VERP mit Google Mail von dem, was ich gefunden habe, tun. Dieser Beitrag fasst zusammen, was ich gefunden habe: http://stackoverflow.com/questions/9925392/does-gmail-not-allow-sender-to-set-a-return-path-value-to-receive-bounce-message . Ich muss einen anderen SMTP-Server verwenden, meinen eigenen oder einen anderen Anbieter. – MikeJansen

2

Sie können Ihre eigene Nachrichten-ID hinzufügen, bevor Sie die E-Mail senden. Ich benutze den nächsten Code:

Guid id = Guid.NewGuid(); //Save the id in your database 
mensajeEmail.Headers.Add("Message-Id", String.Format("<{0}@{1}>",id.ToString(),"mail.example.com")); 

Hinweis: Zum Herunterladen der Nachrichten, die ich OpenPop.Net verwenden, überprüfe ich die message.Headers.InReplyTo Eigenschaft, und es gibt die Meldung ID sended.

Verwandte Themen