2012-05-27 10 views
6

Utilizzando lo SmtpClient e MailMessage classes in .NET per inviare e-mail tramite un server di posta locale (hMailServer), non ho trovato attualmente alcun modo per ottenere il valore di intestazione Message-ID di un messaggio inviato.È possibile acquisire il "Message-ID" di un messaggio di posta elettronica inviato con SmtpClient?

L'idea alla base

Sto cercando di rintracciare programmazione messaggi che sono non recapitata, quindi devo trovare un modo per identificare risposte dal server SMTP di destinazione che rifiuta un certo messaggio.

Ora ho pensato di ricordare semplicemente il valore dell'intestazione SMTP Message-ID e analizzare i messaggi in arrivo per questo ID.

Ho provato a ispezionare il Headers collection dopo aver inviato il messaggio, ma non ho trovato alcun Message-ID.

La mia domanda

E 'possibile ottenere il valore Message-ID intestazione che il mio server SMTP aggiunge durante l'invio di un'istanza MailMessage?

Aggiornamento 2012-05-27

Come da this example Ho provato con successo per generare manualmente un Message-ID per conto mio, proprio prima di inviare.

Tutti i miei esempi funzionano fino ad ora, quindi è che questa è una soluzione alla mia domanda.

+1

Sono abbastanza sicuro che l'ID sia assegnato dal server SMTP e il protocollo SMTP non specifica la restituzione del valore al client. Un modo per aggirare questo sarebbe BCC lo stesso messaggio per un account che controlli ed estrarre l'id del messaggio da quel messaggio ... assumendo che l'id del messaggio sia generato una volta, nel server SMTP iniziale. Un'altra possibilità è aggiungere un "X-tag" personalizzato all'e-mail. –

+0

Grazie, @JeremyHolovacs - Ho già provato ad aggiungere un tag personalizzato (non con il prefisso "X-", tuttavia) sembra che questo tag sia stato perso durante l'inoltro o la risposta al messaggio. –

+1

Sfortunatamente per http://stackoverflow.com/questions/7095104/how-to-confirm-that-mail-has-been-delivered-or-not non esiste un metodo antiproiettile per questo. –

risposta

2

La soluzione standard al tuo problema è VERP. Leggi l'articolo originale di Bernstein per scoprire perché Message-Id et al. non sono affidabili http://cr.yp.to/proto/verp.txt

+1

Cercando di capire come fare VERP con GMail ... Non è possibile inviare utilizzando più indirizzi poiché GMail sovrascrive con il messaggio di posta elettronica sull'account autenticato (anche quando il tuo indirizzo più è basato sull'indirizzo email autenticato). – MikeJansen

+1

@ MikeJansen: se hai una domanda, posta una domanda. – tripleee

+1

scusate, non so perché ho postato quel commento. Non posso davvero VERP con gmail da quello che ho trovato. Questo post riassume ciò che ho trovato: http://stackoverflow.com/questions/9925392/does-gmail-not-allow-sender-to-set-a-return-path-value-to-receive-bounce-message . Dovrò utilizzare un altro server SMTP, il mio o un altro provider. – MikeJansen

2

È possibile aggiungere l'id del proprio messaggio prima di inviare l'e-mail. Io uso il codice successivo:

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

Nota: per scaricare i messaggi che uso OpenPop.Net, verifico la proprietà message.Headers.InReplyTo, e non v'è l'ID del messaggio sended.

Problemi correlati