【问题标题】:Unable to parse email (.msg) in python 3.6无法在 python 3.6 中解析电子邮件 (.msg)
【发布时间】:2018-01-06 15:34:33
【问题描述】:

我有一组存储在 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 和主题字段中的实际值。

任何想法为什么它不打印实际值?

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

【问题讨论】:

    标签: email parsing python-3.x


    【解决方案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')
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-18
    • 2011-03-04
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多