使用Python重新组合以“message / partial”编码的电子邮件消息

时间:2010-06-30 21:08:46

标签: python email mime rfc822

有没有办法在用Content-Type: message/partial编码的Python电子邮件中重新组合(即“{3}}”的“7.3.2。消息/部分子类型”部分?

特别是,给定一组RFC 1521,如何将它们合并回原始版本?即。

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 个答案:

答案 0 :(得分:3)

以下为我工作:( Ubuntu Linux + Thunderbird)

  • 将每封邮件保存到文件夹(例如:part1.dat,part2.dat ... partN.dat) - 订单很重要
  • 合并文件:cat part1.dat part2.dat partN.dat&gt; mail.eml
  • 使用Thunderbird打开文件。 Thunderbird可以理解.eml文件并将其打开为电子邮件(完全组装)

答案 1 :(得分:2)

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