来自MSG的Apache POI HSMF HTML正文提取无法正常工作

时间:2015-10-15 21:38:55

标签: java outlook apache-poi mapi msg

[测试POI 3.13 20150929以及Apache Tika 1.10 jar中包含的(较旧)版本。]

我有带有HTML主体的Outlook MSG文件,包括嵌入图像。

从MSG文件创建HSMF MAPIMessage成功并且大多数信息可用(主题,发件人等),但getHtmlBody()始终返回null。

对于使用HTML正文格式选项在Outlook中构建消息并将其保存为MSG以及在mime / multipart / mixed / related / etc中从Thunderbird发送的消息创建的MSG文件都是如此。并由Outlook收到。 Outlook Spy在_MailItem视图中显示正确的HTML body属性,以及BodyFormat属性2(olFormatHTML)。实际提取的RTF(通过getRtfBody)以{\rtf1\ansi\ansicpg1252\fromhtml1开头。

MAPIMessage的主要块和主要块属性的转储显示PR_BODYPR_RTF_COMPRESSED的块,但没有PR_BODY_HTML。附件似乎是正确的:PR_ATTACH_FLAGS=4用于嵌入式附件,PR_ATTACH_CONTENT_ID已设置,PR_ATTACH_MIME_TAGPR_ATTACH_LONG_FILENAME等。

也许我在这里有一个根本的误解,因为Outlook Spy的_MailItem接口还包含MAPIOBJECT,它似乎没有HTML正文或​​任何正文格式。

任何暗示这里有什么问题? MSG文件显然包含HTML正文。 HSMF不公开整个MSG文件吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

MSDG文件通常不包含PR_HTML属性。 HTML在PR_RTF_COMPRESSED属性内编码。

答案 1 :(得分:0)

Outlook似乎可以解析(并因此更改)一个附加的MSG或EML文件,即使它作为文件附加!因此,附件电子邮件与原始附件文件的字节精确版本不同。 (太有帮助了)

Dmitry Streblechenko回答了这个问题,附加的消息通常仅包含RTF和/或正文文本的纯文本块,因此您必须将RTF转换回HTML :( RTF具有与原始文本的近似传真至少是HTML。

有几种方法可以做到这一点,最明显的选择是Tika:org.apache.tika.parser.rtf.RTFParser