У меня такой сценарий. Я скопировал сообщение Gmail из папки «Входящие» в дочернюю папку «Входящие», скажем, тестовую папку. Теперь сообщение находится в папке «Входящие», а также в папке «Входящие»/«Тест-папка». Теперь, если я хочу удалить (удалить) копию в папке «Входящие»/«Тест-папка» с помощью javamail, она также будет удалена из папки «Входящие».Как правильно удалить скопированное сообщение gmail с помощью javamail?
Я знаю, что gmail поддерживает только одну копию сообщения в своей базе данных, и он просто передает имена папок в сообщение, поэтому очевидно, что если я удалю его из другой папки, он также будет удален из исходной папки.
Следующий код работает для других писем на основе IMAP, как Yahoo и т.д.
Folder inbox = store.getFolder("INBOX");
Folder child = store.getFolder("INBOX/test-folder");
inbox.open(Folder.READ_WRITE);
child.open(Folder.READ_WRITE);
AppendUID[] appendUIDs = inbox.copyUIDMessages(new Message[]{ message }, child);
AppendUID appendUID = appendUIDs[0];
long uid = appendUID.uid;
// EDIT: I have to close and reopen the child folder, otherwise getMessageByUID will return null.
child.close(false);
child.open(Folder.READ_WRITE);
Message copiedMessage = child.getMessageByUID(uid);
if (!copiedMessage.isExpunged() && !copiedMessage.isSet(Flags.Flag.DELETED)) {
copiedMessage.setFlag(Flags.Flag.DELETED, true);
}
inbox.close(true);
child.close(true);
Приведенный выше код удаляется только сообщение Входящие/тест-папку, а не из папки Входящие для Yahoo и все. Но для gmail он удаляет сообщение из папки «Входящие», а также «Входящие»/тестовую папку.
Почтовый клиент, такой как эволюция, корректно обрабатывает этот сценарий для gmail. Он удаляет сообщение только из целевой папки. Итак, как достичь этого, используя javamail или gimap library?
ПРИМЕЧАНИЕ: Я использую 1.5.5 библиотеки javamail.
Извините, мой плохой Билл. Это сработало. С моей стороны были другие ошибки. Благодарю. –