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