仅下载JavaMail&中的电子邮件主题IMAPS

时间:2013-07-09 08:56:48

标签: java javamail

我正在尝试仅下载主题的电子邮件,因为它应该花费更少的时间(下载约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) {
        ...
    }

2 个答案:

答案 0 :(得分:2)

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

FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add("Subject");
folder.fetch(message, fp);

答案 1 :(得分:1)

您正在执行的操作将下载整个邮件信封(但整个邮件),其中包括主题和收件人。下载通常很便宜。如果你真的只想要主题,因为你永远不会查看其他信息,你需要使用以下内容处理原始标题:

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调用将允许您在一个操作中预取所有Subject标题,而不是在处理该消息时获取每个标题。如果您认为这是您想要的,您也可以预取整个信封;有关详细信息,请参阅javadoc。