API JavaMail - Suppression des e-mails

Dans ce chapitre, nous verrons comment supprimer un e-mail à l'aide de l'API JavaMail. La suppression de messages implique de travailler avec les indicateurs associés aux messages. Il existe différents indicateurs pour différents états, certains définis par le système et d'autres définis par l'utilisateur. Les indicateurs prédéfinis sont définis dans la classe interne Flags.Flag et sont répertoriés ci-dessous:

  • Flags.Flag.ANSWERED

  • Flags.Flag.DELETED

  • Flags.Flag.DRAFT

  • Flags.Flag.FLAGGED

  • Flags.Flag.RECENT

  • Flags.Flag.SEEN

  • Flags.Flag.USER

Le protocole POP ne prend en charge que la suppression des messages.

Les étapes de base suivies dans le programme de suppression 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 l'objet Dossier et ouvrez le dossier approprié dans votre boîte aux lettres en mode READ_WRITE.

  • Récupère les messages du dossier de la boîte de réception.

  • Parcourez les messages et tapez "Y" ou "y" si vous souhaitez supprimer le message en appelant la méthode setFlag (Flags.Flag.DELETED, true) sur l'objet Message.

  • Les messages marqués DELETED ne sont pas réellement supprimés, jusqu'à ce que nous appelions la méthode expunge () sur l'objet Folder, ou que nous fermions le dossier avec expunge défini sur true.

  • Fermez l'objet magasin.

Créer une classe Java

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

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

   }

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

Compiler et exécuter

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

Vérifier la sortie

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

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