2010-09-09 33 views
10

Estoy escribiendo un programa que envía mensajes de correo electrónico y desea saber cuándo el receptor recibe el mensaje de correo electrónico que le envié. ¿Cómo puedo hacer esto usando la API de JavaMail?¿Cómo puedo recibir la confirmación del correo electrónico entregado con JavaMail API?

Si uso SMTPMessage, ¿cómo tratar exactamente el resultado después de establecer las opciones de notificación?

SMTPMessage smtpMsg = new SMTPMessage(msg); 
smtpMsg.setNotifyOptions(SMTPMessage.NOTIFY_SUCCESS); 

Respuesta

18

No hay manera estándar de hacer esto que ha de recibir y respetar todos los ámbitos. Veo que usted tiene algunas opciones, sin embargo:

  • añadir una cabecera "Return-Receipt-To" con su dirección de correo electrónico en el valor. Si el destinatario del correo electrónico tiene un cliente que respeta este encabezado, se le enviará un recibo de devolución cuando se abra el correo electrónico. Esto no es confiable, ya que el usuario siempre puede decidir no enviar el recibo, incluso si tiene un cliente que lo admite.

  • Agregue una imagen a su correo electrónico que se carga desde su servidor y coloque un parámetro en la imagen que incluya la dirección de correo electrónico del usuario. Cuando se carga el correo electrónico, la imagen se cargará desde su servidor. Escriba un script que recoja el parámetro de correo electrónico y luego entregue una imagen en blanco. Esto tampoco es confiable, ya que muchos clientes de correo les preguntan a los usuarios si desean descargar imágenes y siempre pueden elegir no hacerlo. Además, algunos clientes de correo electrónico (mayoritariamente) no admiten imágenes.

  • Quizás la forma más confiable es no incluir el mensaje en su correo electrónico. Incluya solo un enlace a un sitio web donde se pueda leer el mensaje, e incluya su dirección de correo electrónico o un código único en el enlace. De esta manera, sabes exactamente quién leyó el mensaje. Por supuesto, esto tiene la desventaja de que las personas no reciben realmente el mensaje en su bandeja de entrada, y también pueden optar por no ir al sitio web para leerlo.

En última instancia, creo que vas a tener que llegar a una solución creativa para resolver este problema, a menos que seas feliz que consigue resultados irregular.

+0

Gracias! Ahora estoy leyendo sobre SMTPMessage (http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/SMTPMessage.html) y tal vez sea una solución a mi problema. –

+0

Una notificación en SMTPMessage le notificará de una entrega exitosa al servidor de buzones del destinatario, no a su escritorio, o que lo leen. –

+0

oh, cometí un error, lo siento. Quise decir que necesito una notificación cuando se entregue el mensaje. –

0

Puede usar el mensaje SMTP y solicitar un estado de entrega (no sé si se enviará cuando el proveedor reciba el correo o si el usuario abre el correo). JavaMail no apoyan directamente estas características directamente y tiene que leer el RFC 3464. También encuentro este hilo con ejemplos, pero no lo probamos javamail

También puede mirar en websina

1

Hay Otro enfoque para saber si un correo electrónico ha sido recibido o no, es recibir correos electrónicos no entregados. He visto una implementación Java bastante buena here.

Utilizaron javax.mail (para procesamiento de correo) y guava (para procesar cadenas y colecciones).

2

Ok, esta es una vieja discusión, pero:

He encontrado una solución sencilla y trabajando here (enlace en español).

Solo tiene que agregar un campo más al encabezado del mensaje. Para lograr esto, debe usar el método addHeader de la clase Part, implementado por la clase Message. Este método recibe 2 parámetros, type y value de encabezado.

de obtener la confirmación debe añadir esta cabecera:

Disposition-Notification-To 

Y el value es el correo donde queremos enviar la respuesta de confirmación:

message.addHeader("Disposition-Notification-To","[email protected]"); 

ATENCIÓN: ser conscientes de que Hoy en día, muchos servidores de correo como gmail están descartando estas solicitudes, por lo que esto no tendrá efecto, pero si estás seguro (como yo) de que el servidor receptor lo permite, funcionará como un hechizo.

1

Apenas añada una imagen ficticia con pantalla ajustado a ninguno en su message.And establecer el atributo src de esta imagen a la URL que desea llamar

Cuestiones relacionadas