关闭IMAP文件夹时,JavaMail API如何清除消息

时间:2015-05-07 12:49:52

标签: java javamail imap javax.mail

我想知道,在调用Folder.close(true)时,JavaMail API如何清除IMAP消息?根据文档,方法“close”的唯一参数“expunge”确定是否要删除之前用\ Deleted标记标记的所有消息。但是,在source code (V. 1.4.7)中,我看不到方法close(类IMAPFolder)中的任何代码,它会删除任何内容或甚至进行任何操作。任何人都可以帮我理解expunge参数的效果吗?

非常感谢您提前和美好的一天。

1 个答案:

答案 0 :(得分:1)

IMAPFolder.class,第1310行:

 // If the expunge flag is set, close the folder first.
 if (expunge && protocol != null)
    protocol.close();

IMAPProtocol.class,第1201行:

 /**
 * CLOSE Command.
 *
 * @see "RFC2060, section 6.4.2"
 */
public void close() throws ProtocolException {
   simpleCommand("CLOSE", null);
}

https://tools.ietf.org/html/rfc2060#section-6.4.2

  

CLOSE命令将永久删除当前选定的内容   邮箱设置了\ Deleted标志的所有邮件,并返回   从选定状态验证状态。没有未标记的EXPUNGE   回复已发送。

     

如果邮箱是,则不会删除任何邮件,也不会给出错误   由EXAMINE命令选择或以其他方式选择为只读。

     

即使选择了邮箱,也可以使用SELECT,EXAMINE或LOGOUT命令   可以在不事先发出CLOSE命令的情况下发布。 SELECT,   EXAMINE和LOGOUT命令隐式关闭当前选中的   邮箱没有做删除。但是,当有很多消息时   删除,CLOSE-LOGOUT或CLOSE-SELECT