【问题标题】:Python 3.4 email ContentManager - how to use?Python 3.4 电子邮件 ContentManager - 如何使用?
【发布时间】:2014-01-30 06:08:27
【问题描述】:

我可能会因为这个问题太宽泛而受到抨击,但无论如何我要问因为我还能做什么?挖掘 Python 源代码肯定会给我足够的“努力”点来帮助我吗?

我正在尝试使用 Python 3.4 的新电子邮件内容管理器http://docs.python.org/dev/library/email.contentmanager.html#content-manager-instances

据我了解,这应该允许我阅读一封电子邮件,然后能够以 UTF-8 格式访问所有电子邮件标头字段和正文,而无需经历从任何奇怪的编码解码回干净的痛苦过程UTF-8。我了解还处理日期标题和电子邮件地址标题的解析。通常使在 Python 中阅读电子邮件的生活更轻松。很棒的东西,很有趣。

但是我是一个初学者程序员 - 当前文档中没有关于如何从头开始的示例。我需要一个简单的示例来展示如何读取电子邮件文件并使用新的电子邮件内容管理器,读回标题字段、地址字段和正文/

我已经深入研究了 python 3.4 源代码并查看了电子邮件内容管理器的测试。我承认自己足够熟悉,以至于我太困惑了,无法从测试中收集到足够的信息来开始编写我自己的简单示例。

那么,有没有人愿意提供一个简单的例子来说明如何使用 Python 3.4 电子邮件内容管理器来读取电子邮件的标题字段以及正文和地址字段?

谢谢

【问题讨论】:

    标签: email python-3.x


    【解决方案1】:

    首先:电子邮件中的“地址字段”实际上只是名称已在标准中达成一致的标头,例如ToFrom。因此,您只需要电子邮件标题和正文即可。

    如果您在阅读电子邮件时指定策略(如 default),则给定现代 contentmanager-powered EmailMessage 实例(如 Python 3.4)返回,您可以通过将其视为访问其自动解码的标头一个 Python 字典,它的主体带有 get_body() 调用。这是我编写的一个示例脚本,它以安全和标准的方式进行这两种操作:

    https://github.com/brandon-rhodes/fopnp/blob/m/py3/chapter12/display_email.py

    在幕后,策略是真正负责标题和内容发生的事情 - default 策略自动使标题服从email.utils 中的编码和解码功能,内容服从你的逻辑问这个是在contentmanager里面。

    但作为调用者,您通常不需要知道幕后的魔法,因为标头将“正常工作”,并且可以通过上述脚本中说明的方法轻松访问内容。

    【讨论】:

      【解决方案2】:

      如果您在文件中有一封电子邮件并想将其读入 Python,则首先是 email.Parser you should probably look atLike Brandon,我不太明白使用 contentmanager 的必要性,但也许你的问题太宽泛了,你需要帮助我更好地理解它。

      代码可能如下所示:

      filename = 'your_file_here.email.txt'
      
      import email.parser
      with open(filename, 'r') as fh:
        message = email.parser.Parser().parse(fh)
      

      甚至还有便利功能,适合您的情况是:

      import email
      message = email.message_from_file('your_file_here.email.txt')
      

      然后查看docs on email.message 以了解如何访问消息的内容。您可以通过is_multipart() 检查它是单个文本块还是由多个部分组成的 MIME 消息。在后一种情况下,有walk() 来迭代每个部分。

      【讨论】:

        猜你喜欢
        • 2015-10-04
        • 2016-03-22
        • 2019-06-18
        • 2012-01-22
        • 2023-02-06
        • 2015-10-20
        • 2023-02-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多