【问题标题】:Prefetch preview text from JavaMail Message从 JavaMail 消息中预取预览文本
【发布时间】:2015-03-25 19:32:16
【问题描述】:

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

【问题讨论】:

    标签: java imap fetch jakarta-mail


    【解决方案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])

    【讨论】:

    • 感谢这个非常有用的答案。请原谅我的粗体,但您能否添加一些 Java 代码来展示如何构建和发送 IMAP 命令来获取消息数据。我以前从未这样做过,我可能需要几天时间才能弄清楚如何做。看来您以前做过类似的事情,如果您能分享一些代码,我将不胜感激。
    • 我在使用 IMAP 之前做过这种事情,但我担心 Javamail 库是另一回事。我只阅读和修改过 Javamail 代码,没有从头开始编写任何代码,所以虽然它可能只有 10 到 20 行,但我需要一个小时或更长时间,这比我在 Stack Overflow 上的花费还多。对不起。
    • 绝对没有理由感到抱歉。我想您可能已经为此类问题编写了一些与 JavaMail 相关的代码,并且可以在此处快速复制粘贴。我非常确定您的回答将引导我找到解决问题的正确方法。仅供参考:我不会立即接受您的回答,因为我想等待 1 或 2 天以获得进一步的答案/解决方案。
    • 如果您搜索“javax.mail Message getContent()”的变体,您可能会发现一些代码可以查看和/或复制。
    • 谢谢,但我想我刚刚在这里找到了解决问题的方法:stackoverflow.com/a/9620801/1697566。正如您所建议的,它使用 IMAPFolder 发送自定义提取命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2011-05-31
    • 2017-02-12
    • 2012-06-25
    相关资源
    最近更新 更多