2010-02-26 13 views
15

Pracuję nad aplikacją Asp.Net, w której wysyłam wiadomość na adres e-mail użytkownika, jeśli zapomni on hasła.Jak sprawdzić, czy wiadomość została pomyślnie wysłana?

Chcę sprawdzić, czy wiadomość została wysłana z powodzeniem, czy nie. Czy istnieje metoda, aby wiedzieć, że na pewno.

EDIT

W przypadku jeśli istnieje does'nt id e-mail, a następnie chciałbym wykryć awarię.

Odpowiedz

15

jeśli twoja metoda SmtpMail.Send(message) nie zwraca błędu, oznacza to, że wiadomość e-mail została wysłana do serwera SMTP, a następnie użytkownik nie jest w Twojej jurysdykcji, czyli jak daleko możesz się dowiedzieć.

6

Według spec:

S: 220 smtp.example.com ESMTP Postfix 
C: HELO relay.example.org 
S: 250 Hello relay.example.org, I am glad to meet you 
C: MAIL FROM:<[email protected]> 
S: 250 Ok 
C: RCPT TO:<[email protected]> 
S: 250 Ok 
C: RCPT TO:<[email protected]> 
S: 250 Ok 
C: DATA 
S: 354 End data with <CR><LF>.<CR><LF> 
C: From: "Bob Example" <[email protected]> 
C: To: Alice Example <[email protected]> 
C: Cc: [email protected] 
C: Date: Tue, 15 Jan 2008 16:02:43 -0500 
C: Subject: Test message 
C: 
C: Hello Alice. 
C: This is a test message with 5 header fields and 4 lines in the message body. 
C: Your friend, 
C: Bob 
C: . 
S: 250 Ok: queued as 12345 
C: QUIT 
S: 221 Bye 
{The server closes the connection} 

Jak tylko serwer mówi 250 Ok: queued as 12345, nie można wiedzieć na pewno, gdyby naprawdę wysłany e-mail, czy też nie, czy też została dostarczona.

+0

Jak właściwie śladowe/sprawdzić czy? Czy istnieje narzędzie do śledzenia komunikacji SMTP? Linux oparty? –

4

Nie. E-mail (oparty na SMPT) jest niewiarygodnym protokołem transportowym i chociaż istnieje kilka hacków do wykrycia, że ​​wiadomość e-mail została odebrana i przeczytana, np. poprzez osadzenie zindywidualizowanego adresu URL obrazu w wiadomości e-mail i śledzenie, że obraz został zażądany przez klienta odbiorcy, nie ma absolutnie niezawodnego sposobu spełnienia żądania.

4

Metoda SmtpClient.Send spowoduje zgłoszenie wyjątku, jeśli wystąpi problem z wysłaniem. Ale nie ma możliwości uzyskania tej wiadomości na serwerze SMTP, ale nie ma możliwości sprawdzenia, czy trafia ona do miejsca docelowego.

7

Umieść metodę .Send (msg) w bloku catch catch i wychwyć wyjątek SmtpFailedRecipientException.

try 
{ 
    mail.Send(msg); 
} 
catch (SmtpFailedRecipientException ex) 
{ 
    // ex.FailedRecipient and ex.GetBaseException() should give you enough info. 
} 
9

Jeśli używasz System.Net.Mail wypróbować

message.DeliveryNotificationOptions = System.Net.Mail.DeliveryNotificationOptions.OnSuccess; 
+1

Aaaa pokonał mnie przez 16 sekund :( – Aaron

+14

A co to miało zrobić? To tylko ustawienie, bez wyjaśnienia. – codingbiz

4

Można użyć DeliveryNotificationOptions otrzymać pokwitowanie.

Jeśli masz MailMessage obiekt o nazwie poczty, to zrobić:

mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess; 
Powiązane problemy