5

添付ファイルを変更する必要がある Python 電子メール ライブラリで読んでいる電子メールがあります。email Message クラスには「attach」メソッドがありますが、「detach」のようなものはありません。マルチパート メッセージから添付ファイルを削除するにはどうすればよいですか? 可能であれば、メッセージを最初から作り直すことなくこれを行いたいです。

基本的に私はしたい:

  1. メールを読み込む
  2. MIME 添付ファイルを削除する
  3. 新しい添付ファイルを追加
4

3 に答える 3

4

私がそれを行うために考え出した方法は次のとおりです。

  1. set_payload でペイロードを空のリストに設定します
  2. ペイロードを作成し、メッセージに添付します。
于 2009-10-26T18:50:11.333 に答える
3

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

>>> 
于 2009-10-26T18:56:37.530 に答える
3

私の経験から言えば、あなたが作業している文脈では、すべてがMessageオブジェクトです。メッセージ、その一部、添付ファイル、すべて。だから、あなたがやりたいことを達成するためには、

  1. Parser APIを使用してメッセージを解析します (これにより、ルートMessageオブジェクトが取得されます)
  2. 構造をウォークし、必要なものと不要なものを判断します (Message インスタンスのメソッドを使用して、.walk()) Message
  3. 取り出したパーツに必要なものを取り付ければ完成です。

繰り返しますが、作業しているのは基本的にツリーでありMessage、.is_multipart() == True のMessageオブジェクトはノードであり、.is_multipart() == False のオブジェクトはエンドノードです (ペイロードは文字列であり、Messageオブジェクトの束)。

于 2009-10-26T18:33:27.200 に答える