2010-02-26 3 views
15

Я разрабатываю приложение Asp.Net, где я отправляю письмо на адрес электронной почты пользователя, если он забывает пароль.Как проверить, была ли почта отправлена ​​успешно

Я хочу проверить, было ли письмо отправлено успешно или нет. Есть ли способ узнать это точно.

EDIT

В случае, если электронный идентификатор does'nt существует, то я бы обнаружить неисправность.

ответ

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? –

4

№ E-mail (на основе SMPT) является ненадежным транспортным протоколом, и хотя есть некоторые хаки, чтобы обнаружить, что электронное письмо получено и прочитано, например. путем встраивания индивидуального URL изображения в электронную почту и отслеживания, что изображение было запрошено клиентом получателя, нет абсолютно надежного способа выполнить ваш запрос.

4

Метод SmtpClient.Send вызовет исключение, если возникнут проблемы с отправкой. Но, не доходя до этого сообщения на SMTP-сервере, нет способа узнать, отправляется ли он туда.

7

Поместите метод .Send (msg) в блок catch try и поймите 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

+14

И что это было делать? Это просто настройка, никаких объяснений. – codingbiz

4

Вы можете использовать DeliveryNotificationOptions получить квитанцию.

Если у вас есть MailMessage объекта с именем почта, сделайте следующее:

mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess; 
Смежные вопросы