Учебники

JavaMail API — удаление писем

В этой главе мы увидим, как удалить электронную почту с помощью JavaMail API. Удаление сообщений включает в себя работу с флагами, связанными с сообщениями. Существуют разные флаги для разных состояний, некоторые определяются системой, а некоторые определяются пользователем. Предопределенные флаги определены во внутреннем классе Flags.Flag и перечислены ниже:

  • Flags.Flag.ANSWERED

  • Flags.Flag.DELETED

  • Flags.Flag.DRAFT

  • Flags.Flag.FLAGGED

  • Flags.Flag.RECENT

  • Flags.Flag.SEEN

  • Flags.Flag.USER

Flags.Flag.ANSWERED

Flags.Flag.DELETED

Flags.Flag.DRAFT

Flags.Flag.FLAGGED

Flags.Flag.RECENT

Flags.Flag.SEEN

Flags.Flag.USER

Протокол POP поддерживает только удаление сообщений.

Основные шаги, выполняемые в программе удаления:

  • Получите объект Session с подробностями POP и SMPT-сервера в свойствах. Нам понадобятся данные POP для получения сообщений и данные SMPT для отправки сообщений.

  • Создайте объект магазина POP3 и подключитесь к магазину.

  • Создайте объект Папка и откройте соответствующую папку в вашем почтовом ящике в режиме READ_WRITE.

  • Получает сообщения из папки входящих сообщений.

  • Перейдите по сообщениям и введите «Y» или «y», если вы хотите удалить сообщение, вызвав метод setFlag (Flags.Flag.DELETED, true) для объекта Message.

  • Сообщения, помеченные как DELETED, на самом деле не удаляются, пока мы не вызовем метод expunge () для объекта Folder или не закроем папку с expunge, установленным в true.

  • Закройте объект магазина.

Получите объект Session с подробностями POP и SMPT-сервера в свойствах. Нам понадобятся данные POP для получения сообщений и данные SMPT для отправки сообщений.

Создайте объект магазина POP3 и подключитесь к магазину.

Создайте объект Папка и откройте соответствующую папку в вашем почтовом ящике в режиме READ_WRITE.

Получает сообщения из папки входящих сообщений.

Перейдите по сообщениям и введите «Y» или «y», если вы хотите удалить сообщение, вызвав метод setFlag (Flags.Flag.DELETED, true) для объекта Message.

Сообщения, помеченные как DELETED, на самом деле не удаляются, пока мы не вызовем метод expunge () для объекта Folder или не закроем папку с expunge, установленным в true.

Закройте объект магазина.

Создать класс Java

Создайте файл Java-класса ForwardEmail , содержимое которого выглядит следующим образом:

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 = "abc@gmail.com";// change accordingly
      String password = "*****";// change accordingly

      delete(host, mailStoreType, username, password);

   }

}

Вы можете включить отладку, раскомментировав оператор emailSession.setDebug (true);

Скомпилируйте и запустите

Теперь, когда наш класс готов, давайте скомпилируем вышеуказанный класс. Я сохранил класс DeleteEmail.java в каталог: / home / manisha / JavaMailAPIExercise . Нам понадобятся jars javax.mail.jar и активации.jar в пути к классам. Выполните приведенную ниже команду, чтобы скомпилировать класс (оба файла jar находятся в каталоге / home / manisha /) из командной строки:

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

Теперь, когда класс скомпилирован, выполните следующую команду:

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

Проверить вывод

Вы должны увидеть следующее сообщение в командной консоли: