用Python重新组装“message/partial”编码的电子邮件消息
有没有办法在Python中重新组合那些用Content-Type: message/partial
编码的邮件?(也就是RFC 1521的第7.3.2节,关于部分邮件的内容)
具体来说,给定一组邮件,我们该如何把它们合并回原来的样子?也就是说:
emails = [...] # a list of `email`.
reassembled_email = merge_emails(emails)
merge_emails
需要做些什么?有没有Python项目实现过这个功能?
你可以期待一封邮件是这样的:
From: me@example.com To: me2@example.com Date: Wed, 30 Jun 2010 14:19:45 -0400 MIME-Version: 1.0 Content-Type: message/partial; id="TAN_U_R<0.0000749046c4>"; number=1; total=2 From: me@example.com Subject: To: me2@example.com Date: Wed, 30 Jun 2010 14:19:45 -0400 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="DC_BOUND_PRE_<1277921980.0000744>" This is a multi-part message in MIME format. --DC_BOUND_PRE_<1277921980.0000c4> Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit This E-mail was sent from Your Printer Some random text. --DC_BOUND_PRE_<1277921980.0000744> Content-Type: application/pdf; name="abcdef.pdf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="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程序可以做到这一点?
谢谢你的阅读,以及你可能提供的任何信息。
祝好,
布莱恩
2 个回答
2
虽然这不是一个Python的解决方案,但这个程序 uudeview 在重新组合 message/partial
类型的电子邮件时非常有用。
3
以下方法对我有效:(Ubuntu Linux + Thunderbird)
- 把每一条消息保存到一个文件夹里(比如:part1.dat、part2.dat……partN.dat)- 文件的顺序很重要
- 合并这些文件:使用命令 cat part1.dat part2.dat partN.dat > mail.eml
- 用Thunderbird打开这个文件。Thunderbird可以识别.eml文件,并把它当作完整的邮件打开