[测试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_BODY
和PR_RTF_COMPRESSED
的块,但没有PR_BODY_HTML
。附件似乎是正确的:PR_ATTACH_FLAGS=4
用于嵌入式附件,PR_ATTACH_CONTENT_ID
已设置,PR_ATTACH_MIME_TAG
,PR_ATTACH_LONG_FILENAME
等。
也许我在这里有一个根本的误解,因为Outlook Spy的_MailItem接口还包含MAPIOBJECT
,它似乎没有HTML正文或任何正文格式。
任何暗示这里有什么问题? MSG文件显然包含HTML正文。 HSMF不公开整个MSG文件吗?
提前致谢。
答案 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