如何使用 Python 获取电子邮件的文本内容?

2024-01-02

给定 Python 2.6 中的 RFC822 消息,我怎样才能获得right文本/纯内容部分?基本上,我想要的算法是这样的:

message = email.message_from_string(raw_message)
if has_mime_part(message, "text/plain"):
    mime_part = get_mime_part(message, "text/plain")
    text_content = decode_mime_part(mime_part)
elif has_mime_part(message, "text/html"):
    mime_part = get_mime_part(message, "text/html")
    html = decode_mime_part(mime_part)
    text_content = render_html_to_plaintext(html)
else:
    # fallback
    text_content = str(message)
return text_content

在这些事情中,我有get_mime_part and has_mime_part下来,但我不太确定如何从 MIME 部分获取解码后的文本。我可以得到encoded文本使用get_payload(),但如果我尝试使用decode的参数get_payload()方法(参见the doc http://docs.python.org/library/email.message.html#email.message.Message.get_payload)当我在文本/纯文本部分调用它时出现错误:

File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/
email/message.py", line 189, in get_payload
    raise TypeError('Expected list, got %s' % type(self._payload))
TypeError: Expected list, got <type 'str'>

此外,我不知道如何获取 HTML 并将其尽可能接近地呈现为文本。


在多部分电子邮件中,email.message.Message.get_payload()返回一个列表,每个部分包含一个项目。最简单的方法是遍历消息并获取每个部分的有效负载:

import email
msg = email.message_from_string(raw_message)
for part in msg.walk():
    # each part is a either non-multipart, or another multipart message
    # that contains further parts... Message is organized like a tree
    if part.get_content_type() == 'text/plain':
        print part.get_payload() # prints the raw text

对于非多部分消息,无需执行所有操作。无论 content_type 是什么,您都可以直接进入 get_payload()。

msg = email.message_from_string(raw_message)
msg.get_payload()

如果内容经过编码,则需要通过None作为第一个参数get_payload(),后跟 True(解码标志是第二个参数)。例如,假设我的电子邮件包含 MS Word 文档附件:

msg = email.message_from_string(raw_message)
for part in msg.walk():
    if part.get_content_type() == 'application/msword':
        name = part.get_param('name') or 'MyDoc.doc'
        f = open(name, 'wb')
        f.write(part.get_payload(None, True)) # You need None as the first param
                                              # because part.is_multipart() 
                                              # is False
        f.close()

至于获得 HTML 部分的合理纯文本近似值,我发现html2text http://www.aaronsw.com/2002/html2text/效果非常好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Python 获取电子邮件的文本内容? 的相关文章

随机推荐

  • MD5解码。他们是如何做到的?

    我认为 不可能解码 md5 哈希值 但我找到了可以解码它们的工具here http md5 web max ca 但我不知道他们是如何在这么短的时间内做到这一点的 大约需要一秒钟 请帮助我理解它 Thanks 它不会解码 MD5 哈希值 它
  • 当无效值传递给 Props 时,TypeScript 不会抛出错误

    const enum ColumnValues one 1 two 2 three 3 interface Props style StyleProp
  • 无法加载,因为未找到支持的源。播放 HTML5 音频元素时[重复]

    这个问题在这里已经有答案了 我有 HTML5 音频元素
  • 如何从数组中获取多个键之间的最大值

    如何从数组中获取多个键之间的最大值 我已经尝试过以下方法只有三个 不是多个 钥匙 getMaxValuefromkeys values any key1 string key2 string key3 string var val1 Mat
  • 保存/加载 iPhone 游戏数据的最佳方式

    我正在开发一款益智游戏 游戏引擎拥有复杂的对象层次结构 从游戏演员到矢量再到过渡动画 根据游戏状态 它们的总数可能从 10 到 1000 在极端情况下 我一直在推迟这个时刻 直到我必须致力于保存和加载所有这些混乱的事情 因为我在这方面没有经
  • java 邮件轮询从邮件中读取内联或嵌入图像(笑脸)

    我是java邮件轮询的新手 我已经创建了一种类型的对话应用程序 如果用户互相发送邮件 然后我从他们那里读取邮件并将其作为对话中的新消息发布 现在的问题是 如果有表情符号 内联或嵌入图像该怎么办 例如 在 gmail 邮件中 我们现在也可以发
  • 如何在 Maven 项目中使用 -Xlint:unchecked 进行编译?

    在 NetBeans 7 2 中 我无法找到如何在 Maven 项目中使用 Xlint unchecked 进行编译 在 Ant 项目下 您可以通过转到 项目属性 gt 编译 来更改编译器标志 但 Maven 项目似乎没有任何此类选项 有什
  • Rails 4 多文件上传解决方案

    有人有解决方案吗 你能给我指出一个不是的吗 http railscasts com episodes 381 jquery file upload http railscasts com episodes 381 jquery file u
  • 如何解析格式错误的 HTML 文件?

    我必须解析一系列网页才能将数据导入应用程序 每种类型的网页都提供相同类型的数据 问题在于每个页面的 HTML 不同 因此数据的位置也不同 另一个问题是 HTML 代码的格式很差 导致无法使用类似 XML 的解析器 到目前为止 我能想到的最好
  • pom.xml 和 web.xml 的 Web 项目之间的区别

    具有 pom xml 和 web xml 的 Java 项目有什么区别 项目可以同时拥有这两种配置吗 它们完全兼容 事实上 他们执行完全不相关的任务 pom xml is the Maven 项目的配置文件 http maven apach
  • Chrome 打印空白页

    如果用户单击缩略图 我有一个旧的 JavaScript 代码可以打印图像 它曾经工作得很好 但最近 仅在 Chrome 中 预览中有一个空白页面 下面是 JsBin 中的演示 http jsbin com yehefuwaso 7 http
  • 在 PySpark 中以可扩展的方式链接多个 WHEN 条件

    我有一本字典 变量pats 与许多when参数 条件和值 from pyspark sql import functions as F df spark createDataFrame 2 col1 pats r d digit r p L
  • ion-button Click在ionic 4中未启动功能

    我的 ionic 4 代码中有一个按钮和一个函数 理想情况下 单击按钮时 该功能应该启动 但事实并非如此 MY HTML
  • 在 ASP.NET Core 中使用 wkhtmltopdf、docker 将 HTML 转换为 PDF

    我正在尝试在 ASP NET Core 应用程序中使用 wkhtmltopdf 将 HTML 转换为 PDF 我已将 wkhtmltopdf exe 添加到我的项目中 并标记为 始终复制到输出 这是我的代码 var htmlContent
  • 使用幂等 ARM TEMPLATE 将两个 Azure 应用服务部署到同一应用服务计划

    PROBLEM 使用 VSTS 幂等持续集成 持续部署流程时 如何将两个不同的 Azure 应用服务部署到同一应用服务计划 环境 我写了两个ARM TEMPLATES每个都将 Web 应用程序部署到 Azure 应用服务 为了部署应用服务
  • ASP.NET - 受保护的变量

    如果我使用受保护的变量 该变量是否存在于整个 Web 应用程序中 或者当用户通过 get 或 post 移动到其他页面时它是否会被删除 我确实知道它无法在其他页面中访问 除非我使用静态变量 但我很好奇它是否存在于整个应用程序中 请告诉我 当
  • Soot 中的调用图

    如何使用 SOOT 在调用图上构建 或者有什么更好的程序可以做到这一点 我被发送到同样的五个页面寻找答案 但我找不到我要找的东西 Eclipse 的插件版本也有问题 它安装正确 但当我想运行代码时我无法选择它 以下是一些示例 包括 Java
  • 使用静态类/方法依赖项测试类

    所以我有一个看起来像这样的课程 public class MyClassToTest MyStaticClass DoSomethingThatIsBadForUnitTesting 和一个静态类 如下所示 public static cl
  • 使用 C++ 与 3000Hz 的线扫描相机连接,并处理/显示数据 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 几个月前 我开始从事一个项目 开发一种算法来处理从线扫描相机设备 例如 每 300us 一条 384 像素的线 获取的数据 由于我是一
  • 如何使用 Python 获取电子邮件的文本内容?

    给定 Python 2 6 中的 RFC822 消息 我怎样才能获得right文本 纯内容部分 基本上 我想要的算法是这样的 message email message from string raw message if has mime