Как проверить, было ли письмо отправлено успешно

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

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

ИЗМЕНИТЬ

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

Ответы

Ответ 1

если ваш метод SmtpMail.Send(message) не возвращает ошибку, это означает, что письмо было отправлено на SMTP-сервер, а затем вы находитесь вне пределов своей юрисдикции, так как вы знаете.

Ответ 2

Если вы используете System.Net.Mail, попробуйте

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

Ответ 3

Поместите метод .Send(msg) в блок catch try и поймите SmtpFailedRecipientException.

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

Ответ 4

Согласно 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, вы не можете точно знать, действительно ли оно отправило электронное письмо или нет, или было отправлено.

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;