Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从JavaMail消息预取预览文本_Java_Imap_Fetch_Jakarta Mail - Fatal编程技术网

从JavaMail消息预取预览文本

从JavaMail消息预取预览文本,java,imap,fetch,jakarta-mail,Java,Imap,Fetch,Jakarta 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.Ite

我正在使用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)
这样的解决方案,因为这将预取整个消息及其所有附件。

您必须首先,然后在消息结构中循环,检查每个部分的mime类型,并下载所需的部分。IMAP允许您使用一个命令下载所有部件,因此,如果Javamail有点智能,那么您应该能够使用两个IMAP命令来完成这项工作,而不管您最终想要下载多少身体部件


如果您是喜欢查看有线通信的人,那么IMAP命令应该类似于
a uid fetch 234789 bodystructure
,然后是
b uid fetch 234789(body.peek[1.1]body.peek[2])

感谢您给出了非常有用的答案。恕我冒昧,但您能否添加一些Java代码来演示如何构建和发送IMAP命令以获取消息数据。我以前从未做过这件事,可能要花上几天的时间才能弄清楚怎么做。由于您以前似乎做过类似的事情,如果您能分享一些代码,我将不胜感激。我在使用IMAP之前做过类似的事情,但我担心Javamail库是另一回事。我只阅读和修改了Javamail代码,没有从头开始编写任何代码,所以尽管可能只有10-20行代码,但需要花费一个小时或更长的时间,这超出了我在堆栈溢出上的花费。对不起,绝对没有理由道歉。我认为您可能已经为此类问题编写了一些与JavaMail相关的代码,并且可以快速复制粘贴到这里。我相信你的回答会使我找到解决问题的正确方法。仅供参考:我不会立即接受您的答案,因为我想等待1或2天以获得进一步的答案/解决方案。如果您搜索“javax.mail Message getContent()”的变体,您可能会找到一些代码来查看和/或复制。谢谢,但我想我刚刚找到了解决我的问题的方法:。正如您所建议的,它使用IMAPFolder发送一个定制的fetch命令。