2016-07-26 3 views
0

У меня такой сценарий. Я скопировал сообщение 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.

ответ

1

Кажется, что это должно работать, но Gmail точно не соответствует спецификации imap. Что показывает debug output?

+0

Извините, мой плохой Билл. Это сработало. С моей стороны были другие ошибки. Благодарю. –