API JavaMail - Eliminación de correos electrónicos

En este capítulo veremos cómo eliminar un correo electrónico utilizando la API de JavaMail. Eliminar mensajes implica trabajar con los indicadores asociados con los mensajes. Hay diferentes banderas para diferentes estados, algunos definidos por el sistema y otros definidos por el usuario. Las banderas predefinidas se definen en la clase interna Flags.Flag y se enumeran a continuación:

  • Flags.Flag.ANSWERED

  • Flags.Flag.DELETED

  • Flags.Flag.DRAFT

  • Flags.Flag.FLAGGED

  • Flags.Flag.RECENT

  • Flags.Flag.SEEN

  • Flags.Flag.USER

El protocolo POP solo admite la eliminación de mensajes.

Los pasos básicos seguidos en el programa de eliminación son:

  • Obtenga el objeto de sesión con los detalles del servidor POP y SMPT en las propiedades. Necesitaríamos detalles de POP para recuperar mensajes y detalles de SMPT para enviar mensajes.

  • Cree un objeto de tienda POP3 y conéctese a la tienda.

  • Cree el objeto Carpeta y abra la carpeta adecuada en su buzón en modo READ_WRITE.

  • Recupera mensajes de la carpeta de la bandeja de entrada.

  • Repita los mensajes y escriba "Y" o "y" si desea eliminar el mensaje invocando el método setFlag (Flags.Flag.DELETED, true) en el objeto Message.

  • Los mensajes marcados como DELETED no se eliminan en realidad hasta que llamamos al método expunge () en el objeto Folder o cerramos la carpeta con el expunge establecido en true.

  • Cierre el objeto de la tienda.

Crear clase Java

Crea un archivo de clase java ForwardEmail, cuyo contenido es el siguiente:

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

   }

}
Puede activar la depuración descomentando la declaración emailSession.setDebug (true);

Compilar y ejecutar

Ahora que nuestra clase está lista, compilemos la clase anterior. He guardado la clase DeleteEmail.java en el directorio:/home/manisha/JavaMailAPIExercise. Necesitaríamos los jars javax.mail.jar y activación.jar en la ruta de clases. Ejecute el siguiente comando para compilar la clase (ambos frascos se colocan en el directorio / home / manisha /) desde el símbolo del sistema:

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

Ahora que la clase está compilada, ejecute el siguiente comando para ejecutar:

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

Verificar salida

Debería ver el siguiente mensaje en la consola de comandos:

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