2010-02-26 73 views
15

Tôi đang phát triển một ứng dụng Asp.Net, nơi tôi đang gửi thư đến địa chỉ email của người dùng, nếu anh quên mật khẩu.Cách kiểm tra xem thư đã được gửi thành công chưa

Tôi muốn kiểm tra xem thư có được gửi thành công hay không. Có phương pháp nào để biết điều đó không.

EDIT

Trong trường hợp nếu một id email does'nt tồn tại, sau đó tôi sẽ phát hiện ra một sự thất bại.

Trả lời

15

nếu phương pháp SmtpMail.Send(message) của bạn không trả về lỗi, điều đó có nghĩa là email được gửi đến máy chủ SMTP, khi đó bạn không thuộc thẩm quyền của mình, đó là khoảng cách bạn có thể biết.

6

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

Ngay sau khi máy chủ nói 250 Ok: queued as 12345, bạn không thể biết chắc chắn nếu nó đã thực sự đã gửi một email hay không, hay nó đã được giao.

+0

Làm thế nào để bạn thực sự theo dõi/kiểm tra xem? Có một công cụ để theo dõi thông tin liên lạc smtp? Linux dựa? –

4

No. E-mail (SMPT dựa) là giao thức truyền tải không đáng tin cậy và mặc dù có một số lỗi để phát hiện rằng một e-mail đã được nhận và đọc, ví dụ: bằng cách nhúng một URL hình ảnh riêng lẻ vào e-mail và theo dõi hình ảnh đã được khách hàng của người nhận yêu cầu, không có cách nào hoàn toàn đáng tin cậy để đáp ứng yêu cầu của bạn.

4

Phương thức SmtpClient.Send sẽ tăng Ngoại lệ nếu có sự cố khi gửi. Nhưng ngoài việc nhận được thông điệp đó đến máy chủ SMTP, không có cách nào để biết liệu nó có làm cho nó đến đích từ đó không.

7

Đặt phương thức .Send (msg) trong khối thử try và bắt SmtpFailedRecipientException.

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

Nếu bạn đang sử dụng System.Net.Mail thử

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

Aaaah đánh tôi sau 16 giây: ( – Aaron

+14

Và đó là giả thiết để làm gì? Nó chỉ là một thiết lập, không có lời giải thích. – codingbiz

4

Bạn có thể sử dụng DeliveryNotificationOptions nhận biên lai.

Nếu bạn có một đối tượng có tên MailMessage mail, làm như sau:

mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess; 
Các vấn đề liên quan