2009-09-23 75 views
29

我正在使用IMAP協議從服務器接收電子郵件,如here所述。 這工作得很好,我可以將電子郵件和附件存儲在磁盤上。使用javax.mail刪除服務器上的電子郵件

問題: 我必須從服務器中刪除文件的可能性,讓他們不再可用,當一個客戶端嘗試接收所有電子郵件?如果是這樣,請告訴我如何。

回答

58

您應該可以通過標準API來完成此操作。

首先,您需要獲取要刪除的Message(或消息)的引用 - 如果您成功讀取它們,則您已經能夠執行此操作。現在,有沒有明確的刪除()操作,但刪除了一樣,所以你可以標記一個消息:

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

這將郵件標記爲已刪除(這通常是什麼樣刪除操作將在臺式機IMAP客戶端做)。爲了迫使已刪除的郵件予以刪除,當你與他們居住的Folder(S)後,調用

folder.close(true); 

其中真標誌指示服務器清除所有已刪除的郵件。

瞧!客戶端在使用任何IMAP客戶端連接到服務器時不應再看到這些消息。

編輯:

不要忘記READ_WRITE模式,否則該消息實際上不會從服務器上刪除,以打開該文件夾。

folder.open(Folder.READ_WRITE); 

參見:http://java.sun.com/developer/onlineTraining/JavaMail/contents.html#JavaMailDeleting

+1

然後給它的答案已使用標誌。 – Koekiebox 2010-11-09 09:17:09

+0

方法名稱應該是[setFlag]不是[setFlags] [message.setFlag(Flags.Flag.DELETED,true);] – 2013-06-04 11:41:47

+0

@MohammedSayed謝謝你,你是對的。我認爲這可能與最近版本中的API更改有關,但不是 - 近四年來這只是錯誤的! – 2013-06-04 14:01:33