2008-09-29 38 views
16

Utilizando Java mail, me gustaría enviar un correo electrónico y verificar el estado. Los estados posibles son:envíe un correo electrónico y verifique el estado

  • Hard-rebote: No hay ningún servidor de correo encontraron
  • Soft-rebote: Servidor de correo encontró, pero cuenta no encontraron
  • éxito

¿Es posible enviar una correo electrónico y obtener algunos comentarios sobre el intento de entrega de la manera que he descrito anteriormente?

EDIT: Un encuestado sugirió buscar una biblioteca Java que proporcione la misma funcionalidad que ListNanny. He buscado alrededor, pero no he encontrado nada. ¿Alguna idea de si existe una biblioteca?

Cheers, Don

Respuesta

5

Usted no puede hacer esto de forma fiable o consistente. ¿Qué sucede si su servidor de correo local lo pasa a un servidor de correo externo corporativo, y luego rebota cuando ese servidor intenta pasarlo? ¿Qué sucede si el servidor de correo no puede comunicarse con el otro servidor de correo y luego el mensaje expira después de 4 días?

1

Encontrar el servidor de correo y conectar: ​​fácil. Buscando una cuenta: posible. Pero depende de si tiene acceso al servidor de correo en primer lugar. Se puede disminuir sus intentos de conexión (por ejemplo, porque la red está en la lista negra)

Lo más complicado es lo que se llama "éxito":

Respuesta corta: No.

Respuesta larga: Teóricamente sería posible, pero tendría que esperar horas si no días para conocer el estado. Con los servidores de correo de listas grises, listas blancas y bloqueadores de spam, muchos solo aceptarán un correo electrónico después de varios intentos de entrega. Solo sabrá sobre el éxito de la entrega cuando finalmente hayan entregado o abandonado el correo. Y dependiendo de la carga del servidor de correo, el envío de un correo electrónico puede posponerse durante un período de tiempo arbitrario.

1

No soy famliar específicamente con Javamail, pero diría esto: incluso el "éxito" puede no ser exitoso.

Usted es la definición de las fallas duras y suaves debe ser lo suficientemente simple como para verificar. Si no puede encontrar un servidor, es difícil, si conecta y el servidor dice "buzón no encontrado", es "suave". ¿Pero qué pasa si el servidor acepta el mensaje y luego lo rebota? Muchos servidores de aplicaciones para el usuario aceptan mensajes desconocidos, ya sea por diseño o por necesidad (relé frontal para servidores backend "reales") y si posteriormente se encuentra que el mensaje se dirige a una dirección no válida, el mensaje se devuelve al remitente. En ese caso, habrá informado un "éxito" en el envío cuando realmente no sea exitoso.

Garantizar la entrega es casi imposible sin algún tipo de "clic aquí" incrustado en el mensaje.

3

Lo que debe hacer es configurar el remitente SMTP del sobre en una dirección que supervise para los mensajes NDR. Tienes que analizar los correos electrónicos a medida que ingresan y descubrir qué salió mal. Esto se hace comúnmente para listas de correo, y productos como ListNanny se utilizan para procesar los mensajes (es un producto .NET, pero estoy seguro de que hay un equivalente Java, o usted mismo puede escribirlo).

El sobre "de" es diferente de la dirección del mensaje "de". Es parte de la conversación SMTP que ocurre entre su código y su MTA. Todos los NDR se enviarán a esa dirección.

+0

ListNanny suena exactamente como lo que necesito. Aunque no he encontrado una biblioteca Java equivalente (aún). –

+0

No es * demasiado * difícil hacerlo usted mismo, al menos en un nivel básico. Si puede encontrar un NDR a tener en cuenta, encontrará algunos fragmentos de datos semiestándar que son fáciles de analizar. Solo saber que tienes un NDR es suficiente. –

+0

Lo eché un vistazo rápido y parece que el formato específico de un NDR no está estandarizado, o si lo es, hay muchas implementaciones que no cumplen. –

1

No confíe en lo que obtiene (si vuelve) información de un servidor.

Muchos servidores de correo ahora están configurados en y no indican si el receipient existe o no, debido al agujero de seguridad que crea. (por ejemplo, si un dominio determinado informa ("sí"/"no") de la existencia de una dirección de correo electrónico, un pirata informático simplemente desataría un ataque de diccionario en el servidor para determinar a todos los usuarios válidos y así recibir un correo no deseado instantáneo . lista

4

Si usted está enviando correo electrónico HTML, es posible que desee incrustar una imagen transparente de 1 píxel en el correo electrónico. la URL de la imagen que realmente hacer referencia a un servlet que devuelve la imagen. la URL también tendría algún tipo de ID de mensaje como parámetro La idea detrás de esto es que cuando el usuario lee el mensaje, él/ella muestra la imagen, lo que activa su servlet, que escribe en el DB que el mensaje ha sido leído.

+0

No estoy seguro de si esto es una buena idea, esta técnica ha sido abusada por los spammers para validar los correos electrónicos, y en la actualidad la mayoría de los clientes de correo no muestran las imágenes automáticamente por esta misma razón. –

1

Puede use http://www.mailcounter.info servicio gratuito para verificar si su correo electrónico ha sido leído y cuántas veces ha sido leído por el usuario. Es un servicio gratuito.

+0

Hola, este enlace de servicio está cerrado :( – Davide

1

lo que debe hacer es verificar el registro MX del correo electrónico del destinatario (consulta DNS MX de la parte del dominio de la dirección de correo electrónico) y enviar el mensaje a través del servidor SMTP que se resuelve.

de esta manera, si no se encuentra el registro MX, se obtiene un "rebote duro", si se encuentra pero el método de envío arroja una excepción, se obtiene un "rebote suave", y si se produce - usted obtener un "éxito".

puede usar el proyecto dnsjava para resolver el registro MX. http://www.dnsjava.org/

0

Este link podría ayudarlo. Esto en un archivo jar experimental que usa RFC 3642 y RFC 3464. Tiene algunas clases básicas que le permiten obtener el estado de entrega del correo. Y también necesitarás el archivo jar Javamail.

Cuestiones relacionadas