API JavaMail - Répondre aux e-mails

Dans ce chapitre, nous verrons comment répondre à un e-mail à l'aide de l'API JavaMail. Les étapes de base suivies dans le programme ci-dessous sont:

  • Obtenez l'objet Session avec les détails du serveur POP et SMPT dans les propriétés. Nous aurions besoin des détails POP pour récupérer les messages et des détails SMPT pour envoyer des messages.

  • Créez un objet de magasin POP3 et connectez-vous au magasin.

  • Créez un objet Dossier et ouvrez le dossier approprié dans votre boîte aux lettres.

  • Récupérez les messages.

  • Parcourez les messages et tapez «Y» ou «y» si vous souhaitez répondre.

  • Obtenez toutes les informations (À, De, Objet, Contenu) du message.

  • Créez le message de réponse à l'aide de la méthode Message.reply (). Cette méthode configure un nouveau message avec le destinataire et le sujet appropriés. La méthode prend un paramètre booléen indiquant s'il faut répondre uniquement à l'expéditeur (faux) ou répondre à tous (vrai).

  • Définissez From, Text et Reply-to dans le message et envoyez-le via l'instance de l'objet Transport.

  • Fermez respectivement les objets Transport, Dossier et Stockage.

Ici, nous avons utilisé le serveur JangoSMPT via lequel les e-mails sont envoyés à notre adresse e-mail de destination. La configuration est expliquée dans le chapitre Configuration de l' environnement .

Créer une classe Java

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

package com.tutorialspoint;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class ReplyToEmail {
   public static void main(String args[]) 
   {
      Date date = null;

      Properties properties = new Properties();
      properties.put("mail.store.protocol", "pop3");
      properties.put("mail.pop3s.host", "pop.gmail.com");
      properties.put("mail.pop3s.port", "995");
      properties.put("mail.pop3.starttls.enable", "true");
      properties.put("mail.smtp.auth", "true");
      properties.put("mail.smtp.starttls.enable", "true");
      properties.put("mail.smtp.host", "relay.jangosmtp.net");
      properties.put("mail.smtp.port", "25");
      Session session = Session.getDefaultInstance(properties);

      // session.setDebug(true);
      try 
      {
         // Get a Store object and connect to the current host
         Store store = session.getStore("pop3s");
         store.connect("pop.gmail.com", "[email protected]",
            "*****");//change the user and password accordingly

         Folder folder = store.getFolder("inbox");
         if (!folder.exists()) {
            System.out.println("inbox not found");
               System.exit(0);
         }
         folder.open(Folder.READ_ONLY);

         BufferedReader reader = new BufferedReader(new InputStreamReader(
            System.in));

         Message[] messages = folder.getMessages();
         if (messages.length != 0) {

            for (int i = 0, n = messages.length; i < n; i++) {
               Message message = messages[i];
               date = message.getSentDate();
               // Get all the information from the message
               String from = InternetAddress.toString(message.getFrom());
               if (from != null) {
                  System.out.println("From: " + from);
               }
               String replyTo = InternetAddress.toString(message
	         .getReplyTo());
               if (replyTo != null) {
                  System.out.println("Reply-to: " + replyTo);
               }
               String to = InternetAddress.toString(message
	         .getRecipients(Message.RecipientType.TO));
               if (to != null) {
                  System.out.println("To: " + to);
               }

               String subject = message.getSubject();
               if (subject != null) {
                  System.out.println("Subject: " + subject);
               }
               Date sent = message.getSentDate();
               if (sent != null) {
                  System.out.println("Sent: " + sent);
               }

               System.out.print("Do you want to reply [y/n] : ");
               String ans = reader.readLine();
               if ("Y".equals(ans) || "y".equals(ans)) {

                  Message replyMessage = new MimeMessage(session);
                  replyMessage = (MimeMessage) message.reply(false);
                  replyMessage.setFrom(new InternetAddress(to));
                  replyMessage.setText("Thanks");
                  replyMessage.setReplyTo(message.getReplyTo());

                  // Send the message by authenticating the SMTP server
                  // Create a Transport instance and call the sendMessage
                  Transport t = session.getTransport("smtp");
                  try {
	   	     //connect to the smpt server using transport instance
		     //change the user and password accordingly	
	             t.connect("abc", "****");
	             t.sendMessage(replyMessage,
                        replyMessage.getAllRecipients());
                  } finally {
                     t.close();
                  }
                  System.out.println("message replied successfully ....");

                  // close the store and folder objects
                  folder.close(false);
                  store.close();

               } else if ("n".equals(ans)) {
                  break;
               }
            }//end of for loop

         } else {
            System.out.println("There is no msg....");
         }

      } catch (Exception e) {
         e.printStackTrace();
      }

   }

}
Vous pouvez activer le débogage en décommentant l'instruction session.setDebug (true);

Compiler et exécuter

Maintenant que notre classe est prête, compilons la classe ci-dessus. J'ai enregistré la classe ReplyToEmail.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: ReplyToEmail.java

Maintenant que la classe est compilée, exécutez la commande suivante pour l'exécuter:

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

Vérifier la sortie

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

From: ABC <[email protected]>
Reply-to: [email protected]
To: XYZ <[email protected]>
Subject: Hi today is a nice day
Sent: Thu Oct 17 15:58:37 IST 2013
Do you want to reply [y/n] : y
message replied successfully ....

Vérifiez la boîte de réception à laquelle le courrier a été envoyé. Dans notre cas, le message reçu ressemble à ceci: