使用python解析outlook.msg文件以获取HTML正文

问题描述 投票:0回答:2

我在 StackOverflow 上四处查看,找不到从

msg
文件获取 HTML 正文的令人满意的答案。有谁知道如何用Python解析outlook中的.msg文件?

我尝试过使用

extract_msg
msg_parser
但没有成功。非常感谢您的帮助!

我还使用

chardet.detect
来检测编码,但有时它会出现一些问题,例如
.
·

示例代码:

msg = extract_msg.openMsg('test.msg')
msg_obj = MsOxMessage('test.msg')

html = ''
try:
    body_encoding = chardet.detect(msg.htmlBody)['encoding']
    html = msg.htmlBody.decode(body_encoding) if msg.htmlBody else ''
except:
    html = None
python email outlook python-3.6
2个回答
1
投票

请记住,Outlook 创建的 MSG 文件不包含

PR_HTML
MAPI 属性(与本机支持 HTML 的 Outlook 存储中的消息不同); HTML 在
PR_RTF_COMPRESSED
属性内进行编码,其中包含压缩的 RTF 流 - 使用 OutlookSpy 查看 MSG 文件(我是其作者) - 单击“更多功能 | OpenIMsgOnIStg”。

您可以使用 Outlook 对象模型调用 Namespace.OpenSharedItem,然后读取 MailItem.HTMLBody 属性,但 Outlook 对象模型不能在服务(例如 IIS)中使用,并且将在默认存储中创建临时消息,这意味着 Outlook 需要先登录到配置文件。

如果使用 Redemption 是一个选项(我是它的作者 - 它是一个扩展 MAPI 包装器,可以从任何语言的服务中使用),您可以使用 RDOSession.

GetMessageFromMsgFile
,然后阅读 RDOMail .
HTMLBody
财产。


0
投票

我和你有同样的要求,Pratik,所以我写了一个包来完成这个任务:rtfparse

或者,您可以使用稍微粗糙的方法 extract-msg ,但是对于 HTML 解封装,他们使用 RTFDE ,它试图盲目地剥离 HTML 周围的所有 RTF 语法,而不实际解析 RTF 文档结构,所以它只是和它使用的剥离算法一样好。在某些情况下,它会在生成的 HTML 文档中留下一些痕迹。 (我已经测试过它,它对于我的用例来说不够好)。

© www.soinside.com 2019 - 2024. All rights reserved.