无法解析python 3.6中的电子邮件(.msg)

时间:2018-01-06 15:34:34

标签: email parsing python-3.x

我有一组存储在E:/驱动器中的.msg文件,我必须阅读它并从中提取一些信息。为此我在Python 3.6中使用以下代码

from email.parser import Parser
p = Parser()
headers = p.parse(open('E:/Ratan/msg_files/Test1.msg', encoding='Latin-1'))
print('To: %s' % headers['To'])
print('From: %s' % headers['From'])
print('Subject: %s' % headers['subject'])

在输出中我得到如下。

To: None
From: None
Subject: None

我没有在To,FROM和subject字段中获得实际值。

有没有想过为什么不打印实际值?

请从此链接下载我的示例msg文件: drive.google.com/file/d/1pwWWG3BgsMKwRr0WmP8GqzG3WX4GmEy6/vi EW

1 个答案:

答案 0 :(得分:-1)

以下是如何使用python的一些标准电子邮件库的演示。

您没有在问题中向我们展示您的输入文件,并且g-drive网址是一个死链接。

下面的代码看起来和你的一样,并且运行正常,所以我不知道你的环境有什么奇怪的,模拟一些Windows'rb'二进制打开废话,CRLF或Latin1编码。

我投入.upper()但除了表明API不区分大小写之外什么也没做。

#! /usr/bin/env python3

from email.parser import Parser
from pathlib import Path
import mailbox


def extract_messages(maildir, mbox_file, k=2, verbose=False):

    for n, message in enumerate(mailbox.mbox(mbox_file)):
        with open(maildir / f'{n}.txt', 'w') as fout:
            fout.write(str(message))

    hdrs = 'From Date Subject In-Reply-To References Message-ID'.split()
    p = Parser()
    for i in range(min(k, n)):
        with open(maildir / f'{i}.txt') as fin:
            msg = p.parse(fin)
            print([len(msg[hdr.upper()] or '')
                   for hdr in hdrs])
            for k, v in msg.items():
                print(k, v)
            print('')
            if verbose:
                print(msg.get_payload())


if __name__ == '__main__':
    # from https://mail.python.org/pipermail/python-dev/
    maildir = Path('/tmp/py-dev/')
    extract_messages(maildir, maildir / '2018-January.txt')