4

でエンコードされた Python 電子メール メッセージを再構成する方法はありますか(つまり、 RFC 1521Content-Type: message/partialのセクション「7.3.2. メッセージ/部分サブタイプ」)?

特に、一連のメールが与えられた場合、それらを元のメールにマージするにはどうすればよいでしょうか? すなわち

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<0.0000749046c4>";
 数=1;
 合計=2

差出人: me@example.com
主題:
宛先: me2@example.com
日付: 2010 年 6 月 30 日 (水) 14:19:45 -0400
MIME バージョン: 1.0
コンテンツ タイプ: マルチパート/混合。
 境界="DC_BOUND_PRE_<1277921980.0000744>"

これは、MIME 形式のマルチパート メッセージです。
--DC_BOUND_PRE_<1277921980.0000c4>
コンテンツ タイプ: テキスト/プレーン。charset=US-ASCII
コンテンツ転送エンコーディング: 7bit

この電子メールは、お使いのプリンターから送信されました

いくつかのランダムなテキスト。

--DC_BOUND_PRE_<1277921980.0000744>
コンテンツタイプ: application/pdf; 名前="abcdef.pdf"
コンテンツ転送エンコーディング: base64
Content-Disposition: 添付;
 ファイル名="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プログラムはありますか?

読んでくれてありがとう、そしてあなたが提供できるかもしれない情報をありがとう。

敬具、

ブライアン

4

2 に答える 2

3

以下は私にとってはうまくいきます:(Ubuntu Linux + Thunderbird)

  • 各メッセージをフォルダーに保存します (例: part1.dat、part2.dat...partN.dat) - 順序が重要です
  • ファイルをマージします: cat part1.dat part2.dat partN.dat > mail.eml
  • Thunderbird でファイルを開きます。Thunderbird は .eml ファイルを認識し、電子メールとして開きます (完全に組み立て済み)
于 2015-04-22T15:06:49.663 に答える
2

Python ソリューションではありませんが、プログラムuudeviewmessage/partialは電子メールの再構築に非常に役立ちました。

于 2010-07-10T01:40:50.170 に答える