添付ファイルを変更する必要がある Python 電子メール ライブラリで読んでいる電子メールがあります。email Message クラスには「attach」メソッドがありますが、「detach」のようなものはありません。マルチパート メッセージから添付ファイルを削除するにはどうすればよいですか? 可能であれば、メッセージを最初から作り直すことなくこれを行いたいです。
基本的に私はしたい:
- メールを読み込む
- 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
オブジェクトです。メッセージ、その一部、添付ファイル、すべて。だから、あなたがやりたいことを達成するためには、
Message
オブジェクトが取得されます)Message
。繰り返しますが、作業しているのは基本的にツリーでありMessage
、.is_multipart() == True のMessage
オブジェクトはノードであり、.is_multipart() == False のオブジェクトはエンドノードです (ペイロードは文字列であり、Message
オブジェクトの束)。