从 JavaMail 消息中预取预览文本

xpa*_*oob 5 java imap jakarta-mail fetch

我正在使用 JavaMail 1.5.2 读取来自 IMAP 帐户的邮件。为了减少对主机的请求数量,我预取了一些消息数据,例如发件人、日期、消息 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);
Run Code Online (Sandbox Code Playgroud)

但是,我还想预取内容的某些部分来创建邮件的预览文本,而不必加载带有所有附件的完整邮件。例如,我想预取类型为“text/plain”并且没有附件的内容的所有部分。那可能吗?

PS:我并不是在寻找类似的解决方案,fp.add(IMAPFolder.FetchProfileItem.MESSAGE)因为这将预取带有所有附件的整个消息。

arn*_*rnt 1

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

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