2011-08-17 29 views
12

A continuación se muestra mi codificación, simplemente echar un vistazo a lo¿Cómo confirmar que el correo ha sido entregado o no?

System.Net.Mail.MailMessage oMail = new System.Net.Mail.MailMessage(); 
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(); 
oMail.From = new System.Net.Mail.MailAddress("[email protected]"); 
oMail.To.Add(TextBox1.Text.Trim()); 
oMail.Subject = "Subject*"; 
oMail.Body = "Body*"; 
oMail.IsBodyHtml = true; 
smtp.Host = "smtp.sendgrid.net"; 
System.Net.NetworkCredential cred = new System.Net.NetworkCredential("myusername", "mypassword"); 
smtp.UseDefaultCredentials = false; 
smtp.Credentials = cred; 
smtp.Send(oMail); 

Aquí tengo que comprobar si ese mensaje ha sido entregado o no.

+0

, entonces necesitaría un enlace en el correo electrónico que el destinatario haga clic en una URL o servicio web para estar seguro –

+0

¿Qué quiere decir con la entrega? ¿Recibe el correo para el host o confirma que el receptor lea el correo? –

Respuesta

19

No puede. Dado que utiliza SMTP, en general, es imposible saber si la entrega fue exitosa o no. Lea la especificación SMTP. El correo se enruta durante la entrega, así que:

  1. No hay garantía de que su mensaje se envíe tan pronto como llame al smtp.Send().
  2. Dado que SMTP es enrutado, no puede estar seguro de que algún nodo en la ruta no fallará con la entrega al enlace ascendente.
0

Si no recibe ninguna excepción en su código o en su servidor SMTP, puede suponer que se ha entregado. Ese es un problema con el correo electrónico, no hay forma de garantizar la entrega.

+0

claramente incorrecto! SMTP no es una entrega garantizada. Como cualquiera sabría que ha recibido un boleto no entregable varias semanas después ... –

+0

pero, si cualquier emailid rebota, no muestra ninguna excepción ... lo he comprobado muchas veces ... ¿hay alguna forma de obtener el rebote? mailerID –

+0

no de este código, no. –

8

Puede establecer la propiedad DeliveryNotificationOptions del MailMessage en OnSuccess.

Hay más información sobre esto aquí: http://msdn.microsoft.com/en-us/library/system.net.mail.deliverynotificationoptions.aspx

y aquí: http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.deliverynotificationoptions.aspx

Como se ha señalado en los comentarios, este método no es fiable al 100%. Es solo una opción.

+4

No es 100% confiable. – agibalov

+2

Más confiable que las otras dos respuestas que no dan absolutamente nada ... – Blindy

+0

Blindy: Incorrecto. –

0

Si tiene acceso al servidor que contiene el registro SMTP, dependiendo del tipo de servidor utilizado y el nivel de detalle utilizado, es posible que pueda obtener una idea mucho mejor sobre el éxito real de la entrega .

Por ejemplo, si está utilizando SmarterMail, podría escribir un analizador simple para leer el registro smtp e informar a su aplicación. No es que esto no deba ser una operación de bloqueo, ya que si su correo electrónico está en la lista gris, pueden transcurrir varios minutos antes de que se entregue.

Otra opción es crear una dirección de correo electrónico "noreply" y enviar sus correos electrónicos con una identificación de correo electrónico incluida en el remitente, es decir, [email protected] y usar un lector pop3 para verificar la bandeja de entrada para correos electrónicos devueltos. Usando la identificación de correo electrónico en el "remitente", puede averiguar qué correo electrónico no se envió. También puede hacer algunos filtros para determinar si se trata de una respuesta del tipo "no se puede entregar" o simplemente "fuera de la oficina".

Muchas opciones disponibles, solo depende de la cantidad de sudor que desee poner en ella.

1

Estas son algunas mejores prácticas para asegurar la entrega de correo electrónico:

  • Establecer un solo hay dirección de respuesta como una bandeja de entrada actual y luego ir a la cuenta de correo electrónico mediante POP3 y buscarse un rebote mensajes.
  • verifique la dirección de correo electrónico es válida antes de enviarlo usando algo como esto biblioteca de validación de correo electrónico:

http://www.kellermansoftware.com/p-37-net-email-validation.aspx

1

En caso de que alguien se tropieza. Aquí está mi experiencia en un viejo servidor Win 2003 con Exchange. Mi aplicación .Net usa SMTP para enviar correos electrónicos y usé una dirección de grupo como "De", por lo que cualquier respuesta iría a todo el grupo. Esta es una operación de despacho y queríamos que cualquier miembro del grupo lo ayudara con cualquier respuesta. Esperábamos que los avisos de no entrega se enviaran al grupo. Eso no pasa. Incluso fui al seguimiento de mensajes y vi que Exchange dijo que envió la notificación al grupo, pero nunca lo obtuvieron. Luego entré en Propiedades del servidor virtual SMTP e ingresé la dirección de correo electrónico del grupo en "Enviar copia del informe de no entrega a:". El mismo resultado, el seguimiento de mensajes dice que lo envió al grupo pero nunca se entregó. Aparentemente, los avisos de no entrega solo serán entregados a una dirección de correo electrónico de un individuo que no sea un grupo. Lo cambié a una dirección individual y funciona.

Cuestiones relacionadas