JavaMail API - Weiterleiten von E-Mails
In diesem Kapitel erfahren Sie, wie Sie eine E-Mail mithilfe der JavaMail-API weiterleiten. 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 weiterleiten möchten.
Holen Sie sich alle Informationen (An, Von, Betreff, Inhalt) der Nachricht.
Erstellen Sie die Weiterleitungsnachricht, indem Sie mit den Teilen arbeiten, aus denen eine Nachricht besteht. Der erste Teil wäre der Text der Nachricht und ein zweiter Teil wäre die weiterzuleitende Nachricht. Kombinieren Sie die beiden zu einem mehrteiligen. Anschließend fügen Sie das Multipart zu einer ordnungsgemäß adressierten Nachricht hinzu und senden es.
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 ForwardEmail, 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.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class ForwardEmail {
public static void main(String[] args) {
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.host", "relay.jangosmtp.net");
properties.put("mail.smtp.port", "25");
Session session = Session.getDefaultInstance(properties);
try {
// session.setDebug(true);
// 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
// Create a Folder object and open the folder
Folder folder = store.getFolder("inbox");
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];
// 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 forward = new MimeMessage(session);
// Fill in header
forward.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(from));
forward.setSubject("Fwd: " + message.getSubject());
forward.setFrom(new InternetAddress(to));
// Create the message part
MimeBodyPart messageBodyPart = new MimeBodyPart();
// Create a multipart message
Multipart multipart = new MimeMultipart();
// set content
messageBodyPart.setContent(message, "message/rfc822");
// Add part to multi part
multipart.addBodyPart(messageBodyPart);
// Associate multi-part with message
forward.setContent(multipart);
forward.saveChanges();
// 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(forward, forward.getAllRecipients());
} finally {
t.close();
}
System.out.println("message forwarded successfully....");
// close the store and folder objects
folder.close(false);
store.close();
}// end if
}// end for
}// end if
} 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 ForwardEmail.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: ForwardEmail.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: ForwardEmail
Ü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 forwarded successfully....
Überprüfen Sie den Posteingang, an den die E-Mail gesendet wurde. In unserem Fall würde die weitergeleitete Nachricht wie folgt aussehen: