在JavaMail下知道未读消息的不同方法

时间:2013-01-25 00:33:00

标签: java message javamail

我只是想知道,应该做什么:

FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
Message messages[] = imap.folder_.search(ft);
int nbTotalUnreadMessages = messages.length;
// make a loop over the messsages to make some procedure

VS

Message[] messages = imap.folder_.getMessages();
for (int i = 0; i < messages.length; i++) {
    Message msg = messages[i];
    Flags flags = msg.getFlags();
    if ( flags.contains(Flags.Flag.SEEN) )
        continue;
    // proceed on the unseen message
}

第一个版本快速点亮并且正常工作。 第二个版本是1 /慢2 /不起作用。 它很慢,因为它解析整个文件夹并且它不起作用,因为正如文档所说,获取消息的唯一事实是自动认为它已被看到。

那该死的,第一个版本应该在内部做什么?我只是出于好奇...... 可以在不获取消息本身的情况下获取消息的标志吗?

1 个答案:

答案 0 :(得分:1)

第一个版本很快,因为服务器会为您搜索所有消息并在一个操作中返回答案。

第二个版本很慢,因为您必须向服务器询问每条消息。第二个版本应该给出与第一个版本相同的结果。如果不是,我需要更多细节,例如协议跟踪显示第一种情况下返回的内容与第二种情况下返回的内容之间的差异。