从JavaMail Message预取预览文本

时间:2015-01-27 08:36:05

标签: java imap fetch javax.mail

我使用JavaMail 1.5.2从IMAP帐户读取邮件。为了减少对主机的请求数量,我预取了一些消息数据,如From,Date,Message-ID等。:

Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);

FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add(FetchProfile.Item.CONTENT_INFO);
fp.add("Message-ID");

Message msgs[] = folder.getMessages();
folder.fetch(msgs,fp);

但是,我还希望预取内容的部分部分,以便为邮件创建预览文本,而无需加载包含所有附件的完整邮件。例如,我想预取具有" text / plain"类型的内容的所有部分。并且没有附件。这可能吗?

PS:我没有搜索fp.add(IMAPFolder.FetchProfileItem.MESSAGE)之类的解决方案,因为这会预取所有附件的整个消息。

1 个答案:

答案 0 :(得分:1)

首先必须retrieve the bodystructure,然后遍历消息结构,检查每个部分的mime类型,并下载所需的部分。 IMAP允许您使用一个命令下载所有部分,因此如果Javamail有点智能,您应该能够使用两个IMAP命令执行此操作,无论您最终想要下载多少个正文部分。

如果您是喜欢查看有线流量的类型,则IMAP命令应该类似于a uid fetch 234789 bodystructure,后跟b uid fetch 234789 (body.peek[1.1] body.peek[2])