2009-09-23 76 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