更快地阅读Java中的收件箱

时间:2012-04-24 04:21:37

标签: javamail imap pop3 gmail-imap javax.mail

我想获得一个列表,其中列出了收件箱中任何邮件中包含的所有人。现在我可以使用javax邮件API通过IMAP连接并下载消息:

Folder folder = imapSslStore.getFolder("[Gmail]/All Mail");
folder.open(Folder.READ_ONLY);
Message[] messages = folder.getMessages();

for(int i = 0; i < messages.length; i++) {
  // This causes the message to be lazily loaded and is slow
  String[] from = messages[i].getFrom();
}

行消息[i] .getFrom()比我想要的慢,因为导致消息被延迟加载。有什么办法可以加快速度吗?例如。有什么样的批量加载我可以做而不是一个一个地加载消息?这是否会加载整个消息,是否我只能加载to / from / cc字段或标题? POP会比IMAP更快吗?

2 个答案:

答案 0 :(得分:6)

您想在for循环

之前添加以下内容
FetchProfile fetchProfile = new FetchProfile();
fetchProfile.add(FetchProfile.Item.ENVELOPE);
folder.fetch(messages, fetchProfile);

这将预取所有消息的“信封”,其中包括from / to / subject / cc字段。

答案 1 :(得分:5)

您可以在文件夹中使用fetch - 方法。据Javadocs说:

  

客户端使用此方法指示指定的项目   需要对给定的消息范围进行集体处理。实施是   期望在a中检索给定消息范围的这些项目   有效的方式。请注意,此方法只是一个提示   实现预取所需的项目。

用于从适当的FetchProfile获取ENVELOPE。当然,它仍然取决于实现,邮件服务器确实有帮助。