В этой главе мы увидим, как удалить электронную почту с помощью 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 = "[email protected]";// 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
Проверить вывод
Вы должны увидеть следующее сообщение в командной консоли: