Python email lib-既存のメッセージから添付ファイルを削除する方法は?

StackOverflow https://stackoverflow.com/questions/1626403

  •  06-07-2019
  •  | 
  •  

質問

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

本質的に私がしたいこと:

  1. メールを読み込む
  2. MIME添付ファイルを削除する
  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

>>> 

他のヒント

まあ、私の経験から、あなたが作業しているコンテキストでは、すべてが Message オブジェクトです。メッセージ、そのパーツ、添付ファイル、すべて。ですから、やりたいことを達成するには、

  1. Parser APIを使用してメッセージを解析します(これにより、ルート Message オブジェクト)
  2. 構造を歩いて、必要なものと必要でないものを決定します(Messageインスタンスのメソッド-.walk()を使用)-すべてが Message であることを覚えておいてください。
  3. 抽出したパーツに添付する必要があるものは何でも添付してください。
繰り返しますが、作業しているのは、本質的には、.is_multipart()== Trueの Message オブジェクトがノードであり、 Message オブジェクトがであるツリーです。 is_multipart()== Falseはエンドノードです(ペイロードは Message オブジェクトの束ではなく文字列です)。

私がそれを理解した方法は次のとおりです。

  1. set_payloadを使用してペイロードを空のリストに設定します
  2. ペイロードを作成し、メッセージに添付します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top