Использование Java mail Pop3, похоже, не может удалить электронные письма из Gmail

#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 с использованием недавнего режима