2012-04-24 41 views
6

我想要列出收件箱中任何邮件中包含的每个人的列表。现在,我可以使用javax邮件API通过IMAP连接并下载邮件:更快地阅读Java中的收件箱

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更快吗?

回答

5

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

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

用于从适当的FetchProfile中获取数据是ENVELOPE。当然,它仍然是实施和邮件服务器确实有帮助。

6

你想之前添加以下for循环

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

这将预取的“信封”的所有信息,其中包括自/至/主题/ cc的领域。