mensajes envío enviar desde correos correo autenticar archivo adjunto java email bounce email-bounces

java - envío - enviar un correo electrónico y verificar el estado



envío de correos java (9)

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

Lo más complicado es lo que llamas "é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.

Usando el correo de Java, me gustaría enviar un correo electrónico y verificar el estado. Los posibles estados incluyen:

  • Hard-bounce: no se encontró un servidor de correo
  • Soft-bounce: servidor de correo encontrado, pero no se encuentra la cuenta
  • Éxito

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

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

Saludos, Don


Lo que tiene que 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 usan para procesar los mensajes (es un producto .NET, pero estoy seguro de que hay un equivalente Java, o usted mismo puede escribirlo).

El sobre "desde" es diferente al mensaje "de" dirección. 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.


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

Muchos servidores de correo ahora están configurados para no indicar 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.


No puedes hacer esto de manera confiable 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?


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

Tu definición de fallas duras y blandas debería 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 un tipo de "clic aquí" incrustado en el mensaje.


Si está enviando un 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 en realidad haría 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 al DB que el mensaje ha sido leído.


Puede utilizar el servicio gratuito http://www.mailcounter.info 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.


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

De esta forma, si no se encuentra el registro MX, obtienes un "rebote duro", si se encuentra pero el método de envío arroja una excepción, obtienes un "rebote suave" y, si pasa, obtienes un "éxito". ".

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


Este enlace puede ayudarte. 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 de Javamail .