6

我想获得一个列表,列出曾经包含在我收件箱中的任何消息中的每个人。现在我可以使用 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();
}

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

4

2 回答 2

6

您想在 for 循环之前添加以下内容

FetchProfile fetchProfile = new FetchProfile();
fetchProfile.add(FetchProfile.Item.ENVELOPE);
folder.fetch(messages, fetchProfile);

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

于 2012-10-17T00:25:44.197 回答
5

您可以在文件夹中使用fetch -method。根据 Javadocs:

客户端使用此方法来指示对于给定的消息范围,指定的项目是整体需要的。期望实现以有效的方式检索给定消息范围的这些项目。请注意,此方法只是实现预取所需项目的提示。

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

于 2012-04-24T04:38:36.033 回答