2010-02-26 149 views
15

我正在開發一個Asp.Net應用程序,如果他發送郵件給用戶的電子郵件地址,如果他忘記了密碼。如何檢查郵件是否已成功發送

我想檢查郵件是否已成功發送。 有什麼方法可以肯定的知道。

編輯

在情況下,如果一個電子郵件ID一點兒也不存在,那麼我會檢測到故障。

回答

15

如果您的SmtpMail.Send(message)方法沒有返回任何錯誤,這意味着電子郵件已發送到SMTP服務器,那麼您已超出您的管轄範圍,即您可以知道多遠。

6

根據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} 

只要服務器說250 Ok: queued as 12345,你可以不知道,如果它真的發送了一封電子郵件與否,或者是否被交付。

+0

你怎麼竟跟蹤/檢查?有沒有一個工具來跟蹤smtp通信?基於Linux? – 2012-04-20 12:45:37

4

號碼電子郵件(基於SMPT)是一種不可靠的傳輸協議,雖然有一些黑客可以檢測到電子郵件已被接收和讀取,通過在電子郵件中嵌入個性化的圖像URL並跟蹤圖像已被接收方的客戶請求,沒有絕對可靠的方式來滿足您的請求。

4

如果發送出現問題,SmtpClient.Send方法將引發異常。但除了將該消息發送到SMTP服務器之外,無法知道它是否從目標站點到達目的地。

7

將.Send(msg)方法放入try catch塊中,並捕獲SmtpFailedRecipientException。

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

如果您使用System.Net.Mail嘗試

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

Aaaah在16秒內擊敗了我:( – Aaron 2010-02-26 15:08:51

+14

那該怎麼辦?這只是一個設置,沒有解釋。 – codingbiz 2013-04-14 15:07:54

4

可以使用DeliveryNotificationOptions收到收據。

如果你有一個名爲郵件MailMessage對象,這樣做:

mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess; 
相關問題