Python email lib-既存のメッセージから添付ファイルを削除する方法は?
質問
添付ファイルを変更する必要があるPythonメールライブラリで読んでいるメールがあります。メールメッセージクラスには、「添付」があります。メソッドですが、「デタッチ」のようなものはありません。マルチパートメッセージから添付ファイルを削除するにはどうすればよいですか?可能であれば、メッセージを最初から再作成せずにこれを実行したいです。
本質的に私がしたいこと:
- メールを読み込む
- MIME添付ファイルを削除する
- 新しい添付ファイルを追加
解決
set_payload()
が役立つ場合があります。
set_payload(payload [、charset])
メッセージオブジェクト全体のペイロードをペイロードに設定します。ペイロードの不変条件を保証するのはクライアントの責任です。
簡単なインタラクティブな例:
>>> from email import mime,message
>>> m1 = message.Message()
>>> t1=email.MIMEText.MIMEText('t1\r\n')
>>> print t1.as_string()
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
t1
>>> m1.attach(t1)
>>> m1.is_multipart()
True
>>> m1.get_payload()
[<email.mime.text.MIMEText instance at 0x00F585A8>]
>>> t2=email.MIMEText.MIMEText('t2\r\n')
>>> m1.set_payload([t2])
>>> print m1.get_payload()[0].as_string()
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
t2
>>>
他のヒント
まあ、私の経験から、あなたが作業しているコンテキストでは、すべてが Message
オブジェクトです。メッセージ、そのパーツ、添付ファイル、すべて。ですから、やりたいことを達成するには、
- Parser APIを使用してメッセージを解析します(これにより、ルート
Message
オブジェクト) - 構造を歩いて、必要なものと必要でないものを決定します(Messageインスタンスのメソッド-.walk()を使用)-すべてが
Message
であることを覚えておいてください。 - 抽出したパーツに添付する必要があるものは何でも添付してください。
Message
オブジェクトがノードであり、 Message
オブジェクトがであるツリーです。 is_multipart()== Falseはエンドノードです(ペイロードは Message
オブジェクトの束ではなく文字列です)。 私がそれを理解した方法は次のとおりです。
- set_payloadを使用してペイロードを空のリストに設定します
- ペイロードを作成し、メッセージに添付します。
所属していません StackOverflow