API JavaMail - Mensajes devueltos

Un mensaje puede rebotarse por varias razones. Este problema se analiza en profundidad en rfc1211 . Solo un servidor puede determinar la existencia de un buzón o nombre de usuario en particular. Cuando el servidor detecta un error, devolverá un mensaje indicando el motivo del error al remitente del mensaje original.

Hay muchos estándares de Internet que cubren las notificaciones de estado de entrega, pero una gran cantidad de servidores no admiten estos nuevos estándares, sino que utilizan técnicas ad hoc para devolver dichos mensajes de error. Por lo tanto, resulta muy difícil correlacionar el mensaje devuelto con el mensaje original que causó el problema.

JavaMail incluye soporte para analizar notificaciones de estado de entrega. Hay una serie de técnicas y heurísticas para abordar este problema. Una de las técnicas son las rutas de retorno de envolvente variable. Puede establecer la ruta de retorno en el sobre como se muestra en el siguiente ejemplo. Esta es la dirección a la que se envían los correos electrónicos de devolución. Es posible que desee establecer esto en una dirección genérica, diferente del encabezado From:, para que pueda procesar rebotes remotos. Esto se hace estableciendo la propiedad mail.smtp.from en JavaMail.

Crear clase Java

Crea un archivo de clase java SendEmail, cuyo contenido es el siguiente:

import java.util.Properties;

import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendEmail {
   public static void main(String[] args) throws Exception {
      String smtpServer = "smtp.gmail.com";
      int port = 587;
      final String userid = "youraddress";//change accordingly
      final String password = "*****";//change accordingly
      String contentType = "text/html";
      String subject = "test: bounce an email to a different address " +
				"from the sender";
      String from = "[email protected]";
      String to = "[email protected]";//some invalid address
      String bounceAddr = "[email protected]";//change accordingly
      String body = "Test: get message to bounce to a separate email address";

      Properties props = new Properties();

      props.put("mail.smtp.auth", "true");
      props.put("mail.smtp.starttls.enable", "true");
      props.put("mail.smtp.host", smtpServer);
      props.put("mail.smtp.port", "587");
      props.put("mail.transport.protocol", "smtp");
      props.put("mail.smtp.from", bounceAddr);

      Session mailSession = Session.getInstance(props,
         new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
               return new PasswordAuthentication(userid, password);
            }
         });

      MimeMessage message = new MimeMessage(mailSession);
      message.addFrom(InternetAddress.parse(from));
      message.setRecipients(Message.RecipientType.TO, to);
      message.setSubject(subject);
      message.setContent(body, contentType);

      Transport transport = mailSession.getTransport();
      try {
         System.out.println("Sending ....");
         transport.connect(smtpServer, port, userid, password);
         transport.sendMessage(message,
            message.getRecipients(Message.RecipientType.TO));
         System.out.println("Sending done ...");
      } catch (Exception e) {
         System.err.println("Error Sending: ");
         e.printStackTrace();

      }
      transport.close();
   }// end function main()
}

Aquí podemos ver que la propiedad mail.smtp.from se fija diferente de la de dirección.

Compilar y ejecutar

Ahora que nuestra clase está lista, compilemos la clase anterior. He guardado la clase SendEmail.java en el directorio:/home/manisha/JavaMailAPIExercise. Necesitaríamos los jars javax.mail.jar y activación.jar en la ruta de clases. Ejecute el siguiente comando para compilar la clase (ambos frascos se colocan en el directorio / home / manisha /) desde el símbolo del sistema:

javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendEmail.java

Ahora que la clase está compilada, ejecute el siguiente comando para ejecutar:

java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendEmail

Verificar salida

Debería ver el siguiente mensaje en la consola de comandos:

Sending ....
Sending done ...