【问题标题】:Extract just email headers in python在 python 中仅提取电子邮件标头
【发布时间】:2012-01-15 11:53:45
【问题描述】:

我在尝试在 python 中提取所有电子邮件标头时遇到了一些问题。我知道如何获取我正在寻找的那些,但我想保存所有标题,但我不知道该怎么做。

我已将其加载到电子邮件对象中

import email
f = open(kwargs['opt_emailfile'])
msg = email.message_from_file(f)
f.close()

所以我可以得到

msg['To']
msg['From']

但我想要所有的标题

解决方案

感谢回答,这是我所做的

        f = open(kwargs['opt_emailfile'])
        msg = email.message_from_file(f)
        f.close()

        parser = email.parser.HeaderParser()
        headers = parser.parsestr(msg.as_string())

        for h in headers.items():
            print h

【问题讨论】:

  • 到目前为止您尝试过什么?您是否有一些部分工作或不工作的代码?
  • ok 将我的帖子编辑为我目前拥有的内容
  • 不确定这是否会帮助任何人,但这是我的两点。我所要做的(对于一个特定的标头)是msg['Header_Name'],如果标头存在,您将获得内容,否则您将一无所获。

标签: python email header


【解决方案1】:

也许使用HeaderParser

from email.parser import HeaderParser
parser = HeaderParser()
h = parser.parsestr(email)

print h.keys()

我刚刚注意到您编辑了您的问题。您实际上可以在不使用 HeaderParser 的情况下从您所拥有的信息中获得相同的信息。例如headers.items() will return 包含标头和相应值的 2 元组列表。

【讨论】:

  • 拥有一个名为 email 的变量可能不是一个好主意,因为它是模块的名称,即使您没有直接导入 email
  • 这(以及问题本身中 OP 的“解决方案”)实际上按顺序返回所有标题,即使 keys() 有点暗示类似字典的行为。
  • 将此改编为我自己对相关问题的回答:stackoverflow.com/a/42090598/874188
  • 如果电子邮件不完整(仅标题),这也会更糟
猜你喜欢
  • 2020-11-23
  • 1970-01-01
  • 2016-03-08
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 2016-02-04
  • 1970-01-01
相关资源
最近更新 更多