1

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

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

对比:

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/不起作用。它很慢,因为它解析整个文件夹并且它不起作用,因为正如文档所说,自动获取消息的唯一事实假设它已被看到。

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

4

1 回答 1

1

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

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

于 2013-01-25T01:04:12.590 回答