2009-09-23 4 views
29

Я получаю письма с сервера с использованием протокола IMAP, как описано here. Это работает очень хорошо, и я могу хранить электронные письма и вложения на диске.Удалить адрес электронной почты на сервере с помощью javax.mail

Вопрос: У меня нет возможности удалять файлы с сервера, так что они больше не доступны, когда клиент пытается получить все письма? Если да, скажите, пожалуйста.

ответ

58

Вы должны быть в состоянии сделать это с помощью стандартных API.

Для начала вам нужно получить ссылку на Message (или сообщения), которые вы хотите удалить, - если вы успешно их прочитали, вы уже можете это сделать. Теперь, нет никаких явных удаления() операций, но вы можете пометить сообщение как удаленные, как так:

message.setFlag(Flags.Flag.DELETED, true); 

Это будет означать сообщение как удалённое (который, как правило, то, что операция удаления будет делать в клиенте рабочего стола IMAP). Для того, чтобы заставить удаленные сообщения, которые будут вычеркнуты, когда вы закончите с Folder (ов), в которых они проживают, называют

folder.close(true); 

где истинный флаг инструктирует сервер вычеркнуть все удаленные сообщения.

И вуаля! Клиент не должен больше видеть эти сообщения, когда подключается к серверу с любым клиентом IMAP.

EDIT:

Не забудьте открыть папку в режиме read_write иначе сообщения не будут фактически удалены с сервера.

folder.open(Folder.READ_WRITE); 

См: http://java.sun.com/developer/onlineTraining/JavaMail/contents.html#JavaMailDeleting

+1

Затем дать ему флаг в ответ используется. – Koekiebox

+0

имя метода должно быть [setFlag] not [setFlags] [message.setFlag (Flags.Flag.DELETED, true);] –

+0

@MohammedSayed Спасибо, ты прав. Я думал, что это может быть связано с изменением API в последней версии, но нет - это было просто неправильно уже почти четыре года! –