#java #email #gmail
#java #Адрес электронной почты #gmail
Вопрос:
У меня есть java-программа, которая действует как POP3-клиент, используя javax.mail. Я могу без проблем перечислять и извлекать содержимое почтового ящика Gmail. Однако, похоже, я не могу удалить электронные письма. Вот (важные части) кода:
POP3Store sto=... another method creates and connects the POP3Store
Folder ibx=sto.getFolder("INBOX");
ibx.open(Folder.READ_WRITE);
Message[] msgarr=ibx.getMessages();
for(int mi=0; mi<msgarr.length; mi ) {
...do stuff with the message
msgarr[mi].setFlag(Flags.Flag.DELETED, true);
}
ibx.close(true); //folder.close(true) indicates to expunge the folder
sto.close();
После запуска этого и просмотра обработки каждого сообщения я захожу в Gmail, а электронные письма все еще там и даже отображаются как непрочитанные. Если я повторно запущу java-клиент, он увидит и обработает те же электронные письма.
Этот же код успешно удаляет электронные письма с сервера exchange.
Как я могу заставить Gmail удалять электронные письма?
Ответ №1:
Gmail специально обрабатывает всплывающее удаление.
Вы можете настроить, что Gmail должен делать при удалении сообщения через POP в настройках Gmail на Forwarding and POP / IMAP
вкладке.
Комментарии:
1. О да! На самом деле, я знал это раньше! Спасибо
Ответ №2:
Как говорит СЛакс, Gmail — это особый случай, когда у него есть свои собственные настройки для управления удалением, которые переопределяют все, что хочет сделать клиент.
Его можно отредактировать в Forwarding and POP / IMAP
Однако я хочу добавить, что для того, чтобы сообщение считалось «загруженным» Gmail, вам необходимо получить содержимое каждого сообщения, а в случае типов сообщений, состоящих из нескольких частей, содержимое каждой части этого сообщения.
Вот несколько примеров кода, которые я использую для принудительного удаления нежелательных сообщений из Gmail:
// Grab the content to get the email off the server
// folder is of type javax.mail.Folder and is already in the correct state to get messages from the mail store (Gmail)
Message msg = folder.getMessage(1);
Multipart multipart = (Multipart) msg.getContent();
int partcount = multipart.getCount();
for (int count = 0; count < partcount; count ) {
multipart.getBodyPart(count);
}
Комментарии:
1. Использовал приведенный выше код snipe для входящих сообщений из Microsoft Outlook и устранил проблему с удалением
Ответ №3:
Если вы добавите «recent:» в свое имя пользователя pop3, вы решите проблему. Пример: recent:yourusername@gmail.com
Это подключается к gmail с использованием недавнего режима