2012-05-27 12 views
6

Korzystanie z iw .NET do wysyłania wiadomości e-mail za pośrednictwem lokalnego serwera poczty (hMailServer), obecnie nie znalazłem sposobu, aby uzyskać wartość nagłówka wysłanej wiadomości.Czy można przechwycić "Message-ID" wiadomości e-mail wysłanej za pomocą SmtpClient?

Ideą

Próbuję programowo śledzić wiadomości, które są niemożliwe do dostarczenia, więc muszę znaleźć sposób, aby zidentyfikować odpowiedzi z serwera SMTP docelowego, który odrzuca pewną wiadomość.

Teraz pomyślałem o zapamiętaniu wartości nagłówka SMTP o wartości Message-ID i przeanalizowaniu przychodzących wiadomości e-mail dla tego identyfikatora.

Próbowałem sprawdzić Headers collection po wysłaniu wiadomości, ale nie znalazłem żadnego Message-ID.

Moje pytanie

Czy to możliwe, aby uzyskać wartość Message-ID nagłówka że mój serwer SMTP dodaje podczas wysyłania instancji MailMessage?

Aktualizacja 2012-05-27

Zgodnie this example Mam powodzeniem próbuje ręcznie wygenerować Message-ID na własną rękę, tuż przed wysłaniem.

Wszystkie moje przykłady działają do tej pory, więc wydaje się, że jest to rozwiązanie mojego pytania.

+1

Jestem prawie pewien, że identyfikator jest przypisany przez serwer SMTP, a protokół SMTP nie określa zwracania tej wartości z powrotem do klienta. Sposób obejścia tego będzie dla BCC tą samą wiadomością na konto, które kontrolujesz, i wyodrębnij identyfikator wiadomości z tego komunikatu ... zakładając, że identyfikator komunikatu jest generowany raz, na początkowym serwerze SMTP. Inną możliwością jest dodanie niestandardowego "tagu X" do wiadomości e-mail. –

+0

Dzięki, @JeremyHolovacs - Próbowałem już dodać niestandardowy znacznik (nie z prefiksem "X-"), wydaje się, że ten znacznik został utracony podczas przekazywania wiadomości lub odpowiadania na nią. –

+1

Niestety za http://stackoverflow.com/questions/7095104/how-to-confirm-that-mail-has-been-delivered-or-not nie ma na to metody kuloodpornej. –

Odpowiedz

2

Standardowym rozwiązaniem problemu jest WER. Przeczytaj oryginalny artykuł Bernsteina, aby dowiedzieć się, dlaczego Message-Id i in. nie są wiarygodne. http://cr.yp.to/proto/verp.txt

+1

Próba znalezienia VERP z GMail ... Nie można wysyłać przy użyciu adresów plus, ponieważ GMail zastępuje wiadomość e-mail na uwierzytelnionym koncie (nawet jeśli adres dodatkowy jest oparty na uwierzytelnionym adresie e-mail). – MikeJansen

+1

@MikeJansen: Jeśli masz pytanie, opublikuj pytanie. – tripleee

+1

Niestety, nie wiem, dlaczego opublikowałem ten komentarz. Naprawdę nie mogę zrobić VERP z Gmailem z tego, co znalazłem. Ten wpis podsumowuje to, co znalazłem: http://stackoverflow.com/questions/9925392/does-gmail-not-allow-sender-to-set-a-return-path-value-to-receive-bounce-message . Będę musiał użyć innego serwera SMTP, mojego lub innego dostawcy. – MikeJansen

2

Możesz dodać swój własny identyfikator wiadomości przed wysłaniem wiadomości e-mail. Używam następny kod:

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

Uwaga: W przypadku komunikatów pobierania używam OpenPop.Net, sprawdzić właściwość message.Headers.InReplyTo, a tam jest id wiadomość Wysłano wiadomość.

Powiązane problemy