Pregunta

Tengo un correo electrónico que estoy leyendo con la biblioteca de correo electrónico de Python y necesito modificar los archivos adjuntos. La clase de mensaje de correo electrónico tiene el " adjuntar " método, pero no tiene nada como '' separar ''. ¿Cómo puedo eliminar un archivo adjunto de un mensaje multiparte? Si es posible, quiero hacer esto sin volver a crear el mensaje desde cero.

Esencialmente quiero:

  1. Cargue el correo electrónico
  2. Eliminar los archivos adjuntos mime
  3. Añadir un nuevo archivo adjunto
¿Fue útil?

Solución

set_payload () puede ayudar.

  

set_payload (carga útil [, juego de caracteres])

     

Establezca la carga útil del objeto de mensaje completo en carga útil. Es responsabilidad del cliente asegurarse de que los invariantes de la carga útil.

Un ejemplo interactivo rápido:

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

>>> 

Otros consejos

Bueno, desde mi experiencia, en el contexto en el que está trabajando, todo es un objeto Message . El mensaje, sus partes, archivos adjuntos, todo. Entonces, para lograr lo que quieres hacer, necesitas

  1. analiza el mensaje usando la Parser API (esto te dará el raíz Message object)
  2. Recorre la estructura, determinando lo que necesitas y lo que no (usando un método de una instancia de Mensaje, - .walk ()), - recuerda, que todo es un Mensaje .
  3. Adjunte todo lo que necesite adjuntar a las partes que ha extraído y estará listo para comenzar.

Para reiterar, lo que está trabajando es, esencialmente, un árbol, donde los objetos Message con .is_multipart () == True son nodos y objetos Message . is_multipart () == Falso son nodos finales (su carga útil es una cadena, no un grupo de objetos Message ).

La forma en que lo descubrí es:

  1. Establezca la carga útil en una lista vacía con set_payload
  2. Cree la carga útil y adjúntela al mensaje.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top