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:

  1. Carica l'e-mail
  2. Rimuovi gli allegati mime
  3. Aggiungi un nuovo allegato
È stato utile?

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

  1. analizza il messaggio utilizzando l'API Parser (questo ti porterà root Message object)
  2. 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 .
  3. 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 è:

  1. Imposta il payload su un elenco vuoto con set_payload
  2. Crea il payload e allegalo al messaggio.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top