Frage

Ich habe eine E-Mail, die ich mit dem Python E-Mail-lib gerade lese, dass ich die Anhänge ändern muß. Die E-Mail-Nachrichtenklasse hat die Methode „anhängen“, muss aber nicht so etwas wie „lösen“. Wie kann ich eine Anlage aus einer mehrteiligen Nachricht entfernen? Wenn möglich, möchte ich, dies zu tun, ohne die Nachricht von Grund auf neu zu erstellen.

Im Grunde mag ich:

  1. Laden Sie die E-Mail
  2. Entfernen Sie den MIME-Anhänge
  3. Fügen Sie einen neuen Anhang
War es hilfreich?

Lösung

set_payload() kann helfen.

  

set_payload(payload[, charset])

     

Stellen Sie das gesamte Nutzlast Nutzlast des Nachrichtenobjekts. Es liegt in der Verantwortung des Kunden, die Nutzlast-Invarianten zu gewährleisten.

Ein schnelles interaktives Beispiel:

>>> 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

>>> 

Andere Tipps

Nun, aus meiner Erfahrung im Kontext Sie arbeitet, alles ist ein Message Objekt. Die Nachricht, seine Teile, Anlagen, alles. Also, um zu erreichen, was Sie tun wollen, müssen Sie

  1. analysieren, um die Nachricht mit dem Parser API (diese erhalten Sie die root Message Objekt)
  2. die Struktur zu Gehen, zu bestimmen, was Sie brauchen und was Sie nicht (ein Verfahren zur Herstellung einer Nachrichteninstanz verwenden, - .walk ()), -. Denken Sie daran, dass alles, was ein Message ist
  3. Bringen Sie, was Sie an die Teile befestigen müssen Sie extrahiert haben, und Sie sind gut zu gehen.

Um es zu wiederholen, was Sie arbeiten ist im Wesentlichen ein Baum, wo Message mit .is_multipart Objekte () == Wahr sind Knoten und Message Objekte mit .is_multipart () == Falsch sind Endknoten (ihre Nutzlast ein String, nicht ein Haufen von Message Objekten).

So wie ich dachte ich heraus, es zu tun:

  1. Stellen Sie die Nutzlast auf eine leere Liste mit set_payload
  2. die Nutzlast erstellen und an die Nachricht anhängen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top