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