3

我正在尝试仅下载主题,因为它应该花费更少的时间(下载约 10 封带照片的电子邮件大约需要 10 分钟:/)。

我现在使用的代码是:

    try {
        Store store = session.getStore("imaps");
        store.connect(...);

        Folder folder = store.getFolder(folderName);
        folder.open(Folder.READ_ONLY);

        message = folder.getMessages();

        for (Message m : message) {
            System.out.println(m.getSubject());
        }

        folder.close(false);
        store.close();
    } catch (MessagingException e) {
        ...
    } catch (IOException e) {
        ...
    }
4

2 回答 2

2

您所做的将下载整个邮件信封(但不是整个邮件),其中包括主题和收件人。这通常是相当便宜的下载。如果您真的只想要主题,因为您永远不会查看其他信息,您需要使用以下方式处理原始标题:

String rawvalue = msg.getHeader("Subject", null);

if (rawvalue == null)
        return null;

try {
        return MimeUtility.decodeText(MimeUtility.unfold(rawvalue));
} catch (UnsupportedEncodingException ex) {
        return rawvalue;
}

另一个答案中描述的 folder.fetch 调用将允许您在一个操作中预取所有主题标头,而不是在处理该消息时获取每个标头。如果您决定这是您想要的,您也可以预取整个信封;有关详细信息,请参阅 javadocs。

于 2013-07-09T18:54:59.253 回答
2

在我看来,您应该考虑使用以下方法预取消息:

FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add("Subject");
folder.fetch(message, fp);
于 2013-07-09T09:26:32.487 回答