使用 Python 重新组装以“消息/部分”编码的电子邮件消息

Posted

技术标签:

【中文标题】使用 Python 重新组装以“消息/部分”编码的电子邮件消息【英文标题】:Re-assemble email messages encoded in 'message/partial' with Python 【发布时间】:2011-03-10 08:48:06 【问题描述】:

有没有办法在 Python 中重新组装使用Content-Type: message/partial 编码的电子邮件消息(即RFC 1521 的“7.3.2. 消息/部分子类型”部分)?

特别是,给定一组emails,如何将它们合并回原来的?即

emails = [...] # a  list of `email`.

reassembled_email = merge_emails(emails)

merge_emails 必须做什么?有任何 Python 项目这样做过吗?

可以期待这样的电子邮件:

来自:me@example.com 至:me2@example.com 日期:2010 年 6 月 30 日,星期三 14:19:45 -0400 MIME 版本:1.0 内容类型:消息/部分; id="TAN_U_R"; 数字=1; 总计=2 来自:me@example.com 主题: 至:me2@example.com 日期:2010 年 6 月 30 日,星期三 14:19:45 -0400 MIME 版本:1.0 内容类型:多部分/混合; 边界="DC_BOUND_PRE_" 这是 MIME 格式的多部分消息。 --DC_BOUND_PRE_ 内容类型:文本/纯文本;字符集=US-ASCII 内容传输编码:7bit 此电子邮件是从您的打印机发送的 一些随机文本。 --DC_BOUND_PRE_ 内容类型:应用程序/pdf;名称="abcdef.pdf" 内容传输编码:base64 内容处置:附件; 文件名="abcdef.pdf" JVBERi0xLjMKJZKgoooKNCAwIG9iago8PC9UeXBlL1hPYmplY3QKL1N1YnR5cGUvSW1hZ2UK ...

这是我最初的想法:

from email import parser 

def merge_emails(emails):
   # we can presume emails are ordered correctly and all the parts accounted for

   content = ''

   for eml im emails:
      content += emails.get_payload()

   return parser.Parser().parsestr(content)

这行得通吗(就这么简单)?你怎么能重新组合这封电子邮件?

作为在 Python 中执行此操作的替代方法,是否有命令行 Unix/Mac OS X 程序可以执行此操作?

感谢您的阅读以及您可能提供的任何信息。

亲切的问候,

布赖恩

【问题讨论】:

【参考方案1】:

以下对我有用:(Ubuntu Linux + Thunderbird)

将每条消息保存到一个文件夹(例如:part1.dat、part2.dat...partN.dat)- 顺序很重要 合并文件:cat part1.dat part2.dat partN.dat > mail.eml 用 Thunderbird 打开文件。 Thunderbird 可以理解 .eml 文件并将其作为电子邮件打开(完全组装)

【讨论】:

谢谢贾加迪什。可以从命令行运行 Thunderbird 来达到预期的效果吗?【参考方案2】:

虽然不是 Python 解决方案,但程序 uudeview 在重组 message/partial 电子邮件方面非常有帮助。

【讨论】:

以上是关于使用 Python 重新组装以“消息/部分”编码的电子邮件消息的主要内容,如果未能解决你的问题,请参考以下文章

如何从python中的字典输出中组装时间序列数据以进行监督分类

使用 FFMPEG 以最少的重新编码添加覆盖

使用 node.js 重新组装 udp 消息

Perl LWP::UserAgent 错误处理 UTF-8 响应

使用map将字数组里的对象重新组装

重新格式化邮政编码以包含空格