更快地阅读Java中的收件箱

Ben*_*ann 6 pop3 imap jakarta-mail javax.mail gmail-imap

我想获得一个列表,列出我收件箱中任何邮件中包含的所有人.现在我可以使用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();
}
Run Code Online (Sandbox Code Playgroud)

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

Rec*_*nic 6

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

FetchProfile fetchProfile = new FetchProfile();
fetchProfile.add(FetchProfile.Item.ENVELOPE);
folder.fetch(messages, fetchProfile);
Run Code Online (Sandbox Code Playgroud)

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


Mik*_*unu 5

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

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

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