Python email lib - Come rimuovere l'allegato dal messaggio esistente?
Domanda
Ho un'e-mail che sto leggendo con l'e-mail Python di cui ho bisogno per modificare gli allegati. La classe Message e-mail ha " allega " metodo, ma non ha nulla di simile a "staccare". Come posso rimuovere un allegato da un messaggio multipart? Se possibile, voglio farlo senza ricreare il messaggio da zero.
In sostanza voglio:
- Carica l'e-mail
- Rimuovi gli allegati mime
- Aggiungi un nuovo allegato
Soluzione
set_payload ()
può essere d'aiuto.
set_payload (payload [, charset])
Imposta l'intero payload dell'oggetto messaggio sul payload. È responsabilità del cliente garantire gli invarianti del payload.
Un rapido esempio interattivo:
>>> 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
>>>
Altri suggerimenti
Bene, dalla mia esperienza, nel contesto in cui lavori, tutto è un oggetto Message
. Il messaggio, le sue parti, gli allegati, tutto. Quindi, per realizzare ciò che vuoi fare, devi
- analizza il messaggio utilizzando l'API Parser (questo ti porterà root
Message
object) - Segui la struttura, determinando ciò di cui hai bisogno e cosa no (usando un metodo di un'istanza di Message, - .walk ()), - ricorda, che tutto è un
Message
. - Allega tutto ciò di cui hai bisogno per collegare le parti che hai estratto e sei a posto.
Per ribadire, quello con cui stai lavorando è, essenzialmente, un albero, in cui Message
oggetti con .is_multipart () == True sono nodi e oggetti Message
con. is_multipart () == False sono nodi finali (il loro payload è una stringa, non un gruppo di oggetti Message
).
Il modo in cui ho capito di farlo è:
- Imposta il payload su un elenco vuoto con set_payload
- Crea il payload e allegalo al messaggio.