2010-02-26 24 views
15

Ich entwickle eine Asp.Net-Anwendung, in der ich eine E-Mail an die E-Mail-Adresse des Benutzers sende, wenn er das Passwort vergisst.So überprüfen Sie, ob die Mail erfolgreich gesendet wurde

Ich möchte überprüfen, ob die Mail erfolgreich gesendet wurde oder nicht. Gibt es eine Methode, um das sicher zu wissen.

EDIT

Im Fall, wenn eine E-Mail existiert does'nt, dann würde ich einen Fehler erkennen.

Antwort

15

Wenn Ihre Methode SmtpMail.Send(message) keinen Fehler zurückgibt, bedeutet dies, dass die E-Mail an den SMTP-Server gesendet wurde. Dann sind Sie außerhalb Ihrer Zuständigkeit, das ist, wie weit Sie wissen können.

6

Nach 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} 

Sobald Server sagt 250 Ok: queued as 12345, können Sie nicht sicher wissen, ob es wirklich eine E-Mail geschickt hatte oder nicht, oder ob es geliefert wurde.

+0

Wie Sie tatsächlich verfolgen/Check das? Gibt es ein Tool, um SMTP-Kommunikation zu verfolgen? Linux basiert? –

4

Nein. E-Mail (SMPT-basiert) ist ein unzuverlässiges Transportprotokoll und obwohl es einige Hacks gibt, um zu erkennen, dass eine E-Mail empfangen und gelesen wurde, z. Durch das Einbetten einer individualisierten Bild-URL in die E-Mail und das Verfolgen, dass das Bild vom Client des Empfängers angefordert wurde, gibt es keine absolut zuverlässige Möglichkeit, Ihre Anfrage zu erfüllen.

4

Die Methode SmtpClient.Send löst eine Ausnahme aus, wenn ein Problem beim Senden auftritt. Aber abgesehen davon, dass diese Nachricht an den SMTP-Server gesendet wird, gibt es keine Möglichkeit zu wissen, ob sie von dort zum Ziel gelangt.

7

Setzen Sie die Methode .Send (msg) in einen try-catch-Block und fangen Sie SmtpFailedRecipientException ab.

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

Wenn Sie mit System.Net.Mail ausprobieren

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

Aaaah schlug mich um 16 Sekunden :( – Aaron

+14

Und was sollte das tun? Es ist nur eine Einstellung, keine Erklärung. – codingbiz

4

Sie die DeliveryNotificationOptions eine Quittung erhalten können.

Wenn Sie ein Objekt mit dem Namen MailMessage Mail haben, dies zu tun:

mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess; 
Verwandte Themen