JavaMail API - Antworten auf E-Mails

In diesem Kapitel erfahren Sie, wie Sie mit der JavaMail-API auf eine E-Mail antworten. Grundlegende Schritte im folgenden Programm sind:

  • Rufen Sie das Sitzungsobjekt mit POP- und SMPT-Serverdetails in den Eigenschaften ab. Wir benötigen POP-Details zum Abrufen von Nachrichten und SMPT-Details zum Senden von Nachrichten.

  • Erstellen Sie ein POP3-Geschäftsobjekt und stellen Sie eine Verbindung zum Geschäft her.

  • Erstellen Sie ein Ordnerobjekt und öffnen Sie den entsprechenden Ordner in Ihrer Mailbox.

  • Nachrichten abrufen.

  • Durchlaufen Sie die Nachrichten und geben Sie "Y" oder "y" ein, wenn Sie antworten möchten.

  • Holen Sie sich alle Informationen (An, Von, Betreff, Inhalt) der Nachricht.

  • Erstellen Sie die Antwortnachricht mit der Methode Message.reply (). Diese Methode konfiguriert eine neue Nachricht mit dem richtigen Empfänger und Betreff. Die Methode verwendet einen booleschen Parameter, der angibt, ob nur auf den Absender (false) oder auf alle (true) geantwortet werden soll.

  • Legen Sie in der Nachricht Von, Text und Antwort an fest und senden Sie sie über die Instanz des Transportobjekts.

  • Schließen Sie die Transport-, Ordner- und Speicherobjekte.

Hier haben wir den JangoSMPT-Server verwendet, über den E-Mails an unsere Ziel-E-Mail-Adresse gesendet werden. Das Setup wird im Kapitel Umgebungs-Setup erläutert .

Erstellen Sie eine Java-Klasse

Erstellen Sie eine Java-Klassendatei ReplyToEmail, deren Inhalt wie folgt ist:

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

   }

}
Sie können das Debuggen aktivieren, indem Sie die Anweisung session.setDebug (true) auskommentieren.

Kompilieren und ausführen

Nachdem unsere Klasse fertig ist, lassen Sie uns die obige Klasse kompilieren. Ich habe die Klasse ReplyToEmail.java im Verzeichnis gespeichert:/home/manisha/JavaMailAPIExercise. Wir müssten die Gläser javax.mail.jar und activation.jar in dem Classpath. Führen Sie den folgenden Befehl aus, um die Klasse (beide Jars befinden sich im Verzeichnis / home / manisha /) an der Eingabeaufforderung zu kompilieren:

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

Führen Sie nach dem Kompilieren der Klasse den folgenden auszuführenden Befehl aus:

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

Überprüfen Sie die Ausgabe

Auf der Befehlskonsole sollte die folgende Meldung angezeigt werden:

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 ....

Überprüfen Sie den Posteingang, an den die E-Mail gesendet wurde. In unserem Fall sieht die empfangene Nachricht wie folgt aus: