【问题标题】:Faster reading of inbox in Java在 Java 中更快地阅读收件箱
【发布时间】:2012-05-04 17:21:43
【问题描述】:

我想获得一份列表,其中列出了曾经包含在我收件箱中任何消息中的所有人。现在我可以使用 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 快吗?

【问题讨论】:

    标签: imap pop3 gmail-imap jakarta-mail


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-15
        • 2014-05-20
        • 1970-01-01
        相关资源
        最近更新 更多