读取.msg文件的属性

时间:2017-12-15 11:52:01

标签: python email msg

我正在尝试读取.msg文件以获取发件人,收件人和标题。

我为我的工作场所制作了这个脚本,我只允许安装默认的python库,所以我想使用电子邮件模块来执行此操作。

在python网站上,我找到了一些使用电子邮件模块的例子。 https://docs.python.org/3/library/email.examples.html

在页面末尾附近会谈到获取发件人,主题和收件人。我尝试过这样的代码:

# Import the email modules we'll need
from email import policy
from email.parser import BytesParser

with open('test_email.msg', 'rb') as fp:
    msg = BytesParser(policy=policy.default).parse(fp)

# Now the header items can be accessed as a dictionary, and any non-ASCII will
# be converted to unicode:
print('To:', msg['to'])
print('From:', msg['from'])
print('Subject:', msg['subject'])

这导致输出:

To: None
From: None
Subject: None

我检查了文件test_email.msg,这是一封有效的电子邮件。

当我添加一行代码

print(msg) 

我得到一个乱码电子邮件的输出,就像我在记事本中打开.msg文件一样。

有人可以建议为什么电子邮件模块没有正确找到发件人/收件人/主题吗?

1 个答案:

答案 0 :(得分:0)

您显然正在尝试阅读某种专有的二进制格式。 Python email库不支持此功能;它只处理传统的(基本上是文本的)RFC822 / RFC5322格式。

要阅读Microsoft的OLE格式,您需要a third-party module,以及一些patience,伏都教和运气。

此外,对于记录,.msg没有明确的定义。 Outlook对其文件使用此文件扩展名,但它也用于其他格式的其他文件,包括传统的RFC822文件。

(第二个链接尝试链接到MSDN上的MS-OXMSG规范;但Microsoft过去认为URL是某种耗尽资源,当您使用它时会耗尽,因此链接可能会停止如果有足够的人点击它就可以工作。)