API JavaMail - Messages renvoyés

Un message peut être renvoyé pour plusieurs raisons. Ce problème est discuté en profondeur à rfc1211 . Seul un serveur peut déterminer l'existence d'une boîte aux lettres ou d'un nom d'utilisateur particulier. Lorsque le serveur détecte une erreur, il renvoie un message indiquant la raison de l'échec à l'expéditeur du message d'origine.

Il existe de nombreuses normes Internet couvrant les notifications d'état de livraison, mais un grand nombre de serveurs ne prennent pas en charge ces nouvelles normes, utilisant plutôt des techniques ad hoc pour renvoyer de tels messages d'échec. Par conséquent, il devient très difficile de corréler le message rejeté avec le message d'origine à l'origine du problème.

JavaMail inclut la prise en charge de l'analyse des notifications d'état de livraison. Il existe un certain nombre de techniques et d'heuristiques pour traiter ce problème. L'une des techniques étant les chemins de retour d'enveloppe variable. Vous pouvez définir le chemin de retour dans l'enveloppeuse comme indiqué dans l'exemple ci-dessous. Il s'agit de l'adresse à laquelle les e-mails de rebond sont envoyés. Vous souhaiterez peut-être définir cela sur une adresse générique, différente de l'en-tête From:, afin de pouvoir traiter les rebonds à distance. Ceci fait en définissant la propriété mail.smtp.from dans JavaMail.

Créer une classe Java

Créer un fichier de classe Java SendEmail, dont le contenu est le suivant:

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()
}

Ici , nous pouvons voir que la propriété mail.smtp.from est définie différente de celle de l' adresse.

Compiler et exécuter

Maintenant que notre classe est prête, compilons la classe ci-dessus. J'ai enregistré la classe SendEmail.java dans le répertoire:/home/manisha/JavaMailAPIExercise. Nous aurions besoin des jars javax.mail.jar et activation.jar dans le classpath. Exécutez la commande ci-dessous pour compiler la classe (les deux fichiers JAR sont placés dans le répertoire / home / manisha /) à partir de l'invite de commande:

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

Maintenant que la classe est compilée, exécutez la commande ci-dessous pour exécuter:

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

Vérifier la sortie

Vous devriez voir le message suivant sur la console de commande:

Sending ....
Sending done ...