Python E-Mail-lib - Wie Anlage entfernen Nachricht vorhanden?
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:
- Laden Sie die E-Mail
- Entfernen Sie den MIME-Anhänge
- Fügen Sie einen neuen Anhang
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
- analysieren, um die Nachricht mit dem Parser API (diese erhalten Sie die root
Message
Objekt) - 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 - 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:
- Stellen Sie die Nutzlast auf eine leere Liste mit set_payload
- die Nutzlast erstellen und an die Nachricht anhängen.