使用 Python 解析电子邮件

2024-03-04

我正在编写一个 Python 脚本来处理从Procmail http://www.procmail.org。正如本文中所建议的question https://stackoverflow.com/questions/1225586/checking-email-with-python,我使用以下 Procmail 配置:

:0:
|$HOME/process_mail.py

我的 process_mail.py 脚本通过 stdin 接收电子邮件,如下所示:

From hostname Tue Jun 15 21:43:30 2010
Received: (qmail 8580 invoked from network); 15 Jun 2010 21:43:22 -0400
Received: from mail-fx0-f44.google.com (209.85.161.44)
by ip-73-187-35-131.ip.secureserver.net with SMTP; 15 Jun 2010 21:43:22 -0400
Received: by fxm19 with SMTP id 19so170709fxm.3
for <[email protected] /cdn-cgi/l/email-protection>; Tue, 15 Jun 2010 18:47:33 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.103.84.1 with SMTP id m1mr2774225mul.26.1276652853684; Tue, 15
Jun 2010 18:47:33 -0700 (PDT)
Received: by 10.123.143.4 with HTTP; Tue, 15 Jun 2010 18:47:33 -0700 (PDT)
Date: Tue, 15 Jun 2010 20:47:33 -0500
Message-ID: <[email protected] /cdn-cgi/l/email-protection>
Subject: TEST 12
From: Full Name <[email protected] /cdn-cgi/l/email-protection>
To: [email protected] /cdn-cgi/l/email-protection
Content-Type: text/plain; charset=ISO-8859-1

ONE
TWO
THREE

我试图以这种方式解析该消息:

>>> import email
>>> msg = email.message_from_string(full_message)

我想要获取“发件人”、“收件人”和“主题”等消息字段。但是,消息对象不包含任何这些字段。

我究竟做错了什么?


您必须确保这些行不会意外中断(如上面所示,尽管很难说这是否是复制粘贴问题)——并带有完整的消息,例如:

Received: (qmail 8580 invoked from network); 15 Jun 2010 21:43:22 -0400
Received: from mail-fx0-f44.google.com (209.85.161.44) by ip-73-187-35-131.ip.secureserver.net with SMTP; 15 Jun 2010 21:43:22 -0400
Received: by fxm19 with SMTP id 19so170709fxm.3 for <[email protected] /cdn-cgi/l/email-protection>; Tue, 15 Jun 2010 18:47:33 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.103.84.1 with SMTP id m1mr2774225mul.26.1276652853684; Tue, 15 Jun 2010 18:47:33 -0700 (PDT)
Received: by 10.123.143.4 with HTTP; Tue, 15 Jun 2010 18:47:33 -0700 (PDT)
Date: Tue, 15 Jun 2010 20:47:33 -0500
Message-ID: <[email protected] /cdn-cgi/l/email-protection>
Subject: TEST 12
From: Full Name <[email protected] /cdn-cgi/l/email-protection>
To: [email protected] /cdn-cgi/l/email-protection
Content-Type: text/plain; charset=ISO-8859-1

ONE
TWO
THREE

then

msg = email.message_from_string(msgtxt)
print msg['Subject']

prints TEST 12如预期的。

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

使用 Python 解析电子邮件 的相关文章

随机推荐

  • 可以使用 SQL 按日期排序,但将空日期放在结果集的后面吗?

    我在 MySQL 数据库中有一堆任务 其中一个字段是 截止日期 并非每项任务都必须有截止日期 我想使用 SQL 按截止日期对任务进行排序 但将没有截止日期的任务放在结果集的后面 就像现在一样 空日期首先显示 然后其余日期按最早到最晚的截止日
  • 为什么性能分析器中的内存使用部分被禁用?

    我想运行内存使用会话或对象分配 最好两者都运行 但我只有可用类型 CPU 使用情况和 GPU 使用情况 当给定部分被禁用时 VS 不会显示任何提示 我尝试了我编写的其他几个项目 一个接一个都只有这两个部分 我运行 64 位 Windows
  • 加载PEM格式证书

    如何在 openssl c 中将 PEM 格式证书加载为 x509 int SSL use certificate SSL ssl X509 x int SSL use certificate ASN1 SSL ssl unsigned c
  • php_mongo 扩展已安装,但为什么 rockmongo 仍然无法连接?

    我有一个wamp服务器 我还安装了 mongodb 我已经安装了 php mongo 扩展 在 php ini 中进行更改 我下载了 rockmongo 将文件解压到我的 www 文件夹中 我编辑了配置文件 但是当我尝试打开 GUI 时 它
  • Rails 4 中具有多个字的控制器的路由

    我刚刚升级到 Rails 4 发现路由出现意外行为 我们有一个名为 EmailPreviewController 的控制器 其路由是 get emailpreview controller EmailPreview action index
  • 配置 webpack 以允许浏览器调试

    我是 webpack 的新手 我正在转换现有的 Web 应用程序以使用它 我正在使用 webpack 来捆绑和缩小我的 JS 这在部署时非常有用 但这使得在开发过程中调试非常困难 通常我使用 chrome 内置的调试器来调试 JS 问题 或
  • SQL Server 探查器

    当您使用 SQL Server 探查器时 持续时间和 CPU 之间有什么区别 我知道默认情况下两者都以毫秒显示 CPU 是运行查询所需的 CPU 时间 而持续时间更像是查询返回任何数据所需的时间 根据我的理解 如果存在任何阻塞等 您的 CP
  • 如何在Java中使用PDFBox获取PDF文件中的所有书签

    我是 Apache PDFbox 的新手 我想使用Java中的PDFBox库提取PDF文件中的所有书签 知道如何提取它们吗 来自在源码下载中 PDDocument document PDDocument load new File PDDo
  • 将表从一个数据库复制到另一个数据库的最简单方法?

    当数据库位于不同用户下时 将数据从一个数据库中的表复制到另一个数据库中的表的最佳方法是什么 我知道我可以使用 INSERT INTO database2 table2 SELECT from database1 table1 但这里的问题是
  • Android 应用程序通过移动端口使用 P2P 模式流式传输 IP 摄像机?

    我正在尝试通过 Android 应用程序上的 IP 摄像头流式传输视频 我已经使用以下方法成功获取了视频 使用媒体播放器和 Surface View 的 RTSP 使用视频视图的 RTSP 重定向到 VLC 以流式传输视频 重定向到本机 用
  • 实际示例使用 dup 或 dup2

    我知道什么dup dup2 http www opengroup org onlinepubs 009695399 functions dup html可以 但是不知道什么时候会用到 有什么实际例子吗 示例之一是 I O 重定向 为此 您分
  • android sdk 位置不能位于文件系统根目录

    我已经将 Android Studio 安装在 F 驱动器中 我的 Flutter 项目位于 E 驱动器中 Flutter插件安装在Android Studio中 但是当我在 Android Studio 中打开项目并转到 SDK 管理器时
  • 在具有自动高度的 IFrame 中获取 Google 表单

    所以我有一个用 Google Docs 构建的表单 因为它看起来比从头开始更容易 我通过将代码从谷歌页面复制粘贴到我的域上的页面来实现这一点 我设法用我在这里找到的这个可爱的小脚本让它自动调整其高度 http www frontpagewe
  • 仅在给定用户 ID 的情况下选择固定范围高分的有效方法

    我有一个表格 其中包含每个球员参加过的每场比赛的记录 从这个问题的最佳答案我已经有了一个很好的开始 百万条目排名 https stackoverflow com questions 5436263 ranking with millions
  • 检测android中的home按钮按下

    这已经让我发疯有一段时间了 有没有什么方法可以可靠地检测 Android 应用程序中是否按下了主页按钮 如果做不到这一点 是否有一种可靠的方法来判断是什么导致活动进入 onPause 即我们能否检测到它是否是由新活动启动或按返回 主页引起的
  • AWS DynamoDB - 如何在 1 次调用中实现:如果集合存在,则添加要设置的值 - 或者用值实例化集合?

    我有一个用户表 有一个名为 朋友 的属性 它将是用户所有朋友的 id 的集合 最初 我尝试在创建用户时将 Friends 属性实例化为空集 但收到错误消息 指出不能有空属性 因此 如果某人还没有朋友 我能找到的唯一解决方案是读取用户的属性
  • 内联插件不起作用

    根据Chart js 文档 http www chartjs org docs latest developers plugins html 以下代码应该可以工作 new Chart document getElementById char
  • Github 操作:在单个运行器中运行多个作业或在作业之间共享工作空间

    有什么方法可以在单个运行器中运行多个作业或在作业之间共享 Github 操作工作区 在我的组织中 开发团队使用由多个团队创建和管理的多个可重用工作流程 团队build创建和管理build yaml构建应用程序 我的团队创建并管理analys
  • 我可以在 Microsoft Access VBA 中使用变量作为控件的名称吗

    我有一个 Microsoft Access 弹出表单 用于查找地址 一旦用户找到邮政编码 该地址就会被放入其启动表单的各个文本框中 问题是 这个弹出表单是从整个数据库中的各种表单启动的 因此它将结果放入的文本框位于不同的位置 我尝试通过以下
  • 使用 Python 解析电子邮件

    我正在编写一个 Python 脚本来处理从Procmail http www procmail org 正如本文中所建议的question https stackoverflow com questions 1225586 checking