2010-02-26 16 views
15

Estoy desarrollando una aplicación Asp.Net, donde estoy enviando un correo a la dirección de correo electrónico del usuario, si olvida la contraseña.Cómo comprobar si el correo se ha enviado correctamente

Quiero verificar si el correo se ha enviado con éxito o no. ¿Hay algún método para saberlo con certeza?

EDITAR

En caso de que un correo electrónico de identificación does'nt existe, entonces habría de detectar un fallo.

Respuesta

15

si su método SmtpMail.Send(message) no devuelve ningún error, significa que el correo electrónico se envió al servidor SMTP, entonces usted está fuera de su jurisdicción, eso es lo lejos que puede saber.

6

Según 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} 

Tan pronto como dice el servidor 250 Ok: queued as 12345, no se puede saber con seguridad si realmente había enviado un correo electrónico o no, o si ha sido pronunciada.

+0

¿Cómo es lo que realmente traza/comprobar que? ¿Hay alguna herramienta para rastrear las comunicaciones smtp? Basado en Linux? –

4

No. El correo electrónico (basado en SMPT) es un protocolo de transporte no confiable y aunque hay algunos hacks para detectar que un correo electrónico ha sido recibido y leído, p. al insertar una URL de imagen individualizada en el correo electrónico y hacer un seguimiento de que la imagen ha sido solicitada por el cliente del destinatario, no hay una manera absolutamente confiable de cumplir con su solicitud.

4

El método SmtpClient.Send generará una excepción si hay un problema al enviar. Pero más allá de transmitir ese mensaje al servidor SMTP, no hay manera de saber si llega al destino desde allí.

7

Ponga el método .Send (msg) en un bloque try catch, y capture SmtpFailedRecipientException.

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

Si está utilizando System.Net.Mail probar

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

Aaaah me ganó por 16 segundos :( – Aaron

+14

¿Y qué se supone que debes hacer? Es solo un ajuste, sin explicación. – codingbiz

4

Puede utilizar los DeliveryNotificationOptions recibir un recibo.

Si usted tiene un correo llamado MailMessage objeto, hacer esto:

mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess; 
Cuestiones relacionadas