JavaMail API - Löschen von E-Mails
In diesem Kapitel erfahren Sie, wie Sie eine E-Mail mit der JavaMail-API löschen. Das Löschen von Nachrichten umfasst das Arbeiten mit den Flags, die den Nachrichten zugeordnet sind. Es gibt verschiedene Flags für verschiedene Zustände, einige systemdefiniert und einige benutzerdefiniert. Die vordefinierten Flags werden in der inneren Klasse Flags.Flag definiert und sind unten aufgeführt:
Flags.Flag.ANSWERED
Flags.Flag.DELETED
Flags.Flag.DRAFT
Flags.Flag.FLAGGED
Flags.Flag.RECENT
Flags.Flag.SEEN
Flags.Flag.USER
Das POP-Protokoll unterstützt nur das Löschen der Nachrichten.
Grundlegende Schritte im Löschprogramm 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 Ihrem Postfach im READ_WRITE-Modus.
Ruft Nachrichten aus dem Posteingangsordner ab.
Durchlaufen Sie die Nachrichten und geben Sie "Y" oder "y" ein, wenn Sie die Nachricht löschen möchten, indem Sie die Methode setFlag (Flags.Flag.DELETED, true) für das Nachrichtenobjekt aufrufen.
Die mit DELETED gekennzeichneten Nachrichten werden erst gelöscht, wenn wir die expunge () -Methode für das Folder-Objekt aufrufen oder den Ordner schließen, wenn expunge auf true gesetzt ist.
Schließen Sie das Speicherobjekt.
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.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
public class DeleteEmail {
public static void delete(String pop3Host, String storeType, String user,
String password)
{
try
{
// get the session object
Properties properties = new Properties();
properties.put("mail.store.protocol", "pop3");
properties.put("mail.pop3s.host", pop3Host);
properties.put("mail.pop3s.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
Session emailSession = Session.getDefaultInstance(properties);
// emailSession.setDebug(true);
// create the POP3 store object and connect with the pop server
Store store = emailSession.getStore("pop3s");
store.connect(pop3Host, user, password);
// create the folder object and open it
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_WRITE);
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
// retrieve the messages from the folder in an array and print it
Message[] messages = emailFolder.getMessages();
System.out.println("messages.length---" + messages.length);
for (int i = 0; i < messages.length; i++) {
Message message = messages[i];
System.out.println("---------------------------------");
System.out.println("Email Number " + (i + 1));
System.out.println("Subject: " + message.getSubject());
System.out.println("From: " + message.getFrom()[0]);
String subject = message.getSubject();
System.out.print("Do you want to delete this message [y/n] ? ");
String ans = reader.readLine();
if ("Y".equals(ans) || "y".equals(ans)) {
// set the DELETE flag to true
message.setFlag(Flags.Flag.DELETED, true);
System.out.println("Marked DELETE for message: " + subject);
} else if ("n".equals(ans)) {
break;
}
}
// expunges the folder to remove messages which are marked deleted
emailFolder.close(true);
store.close();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (IOException io) {
io.printStackTrace();
}
}
public static void main(String[] args) {
String host = "pop.gmail.com";// change accordingly
String mailStoreType = "pop3";
String username = "[email protected]";// change accordingly
String password = "*****";// change accordingly
delete(host, mailStoreType, username, password);
}
}
Sie können das Debuggen aktivieren, indem Sie die Anweisung emailSession.setDebug (true) auskommentieren.
Kompilieren und ausführen
Nachdem unsere Klasse fertig ist, lassen Sie uns die obige Klasse kompilieren. Ich habe die Klasse DeleteEmail.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: DeleteEmail.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: DeleteEmail
Überprüfen Sie die Ausgabe
Auf der Befehlskonsole sollte die folgende Meldung angezeigt werden:
messages.length---1
---------------------------------
Email Number 1
Subject: Testing
From: ABC <[email protected]>
Do you want to delete this message [y/n] ? y
Marked DELETE for message: Testing