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
Протокол POP поддерживает только удаление сообщений.
Основные шаги, выполняемые в программе удаления:
Получите объект Session с подробной информацией о серверах POP и SMPT в свойствах. Нам понадобятся данные POP для получения сообщений и данные SMPT для отправки сообщений.
Создайте объект магазина POP3 и подключитесь к магазину.
Создайте объект Folder и откройте соответствующую папку в вашем почтовом ящике в режиме 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. Мы должны были бы банки javax.mail.jar и activation.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
Проверить вывод
Вы должны увидеть следующее сообщение в командной консоли:
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