Tengo un objeto de mensaje de correo electrónico multiparte, y quiero convertir el archivo adjunto en ese mensaje de correo electrónico en un objeto de archivo python. es posible? Si es posible, ¿qué método o clase en Python debería considerar para realizar tal tarea?Obtención de adjuntos de correo al objeto de archivo python
Respuesta
Realmente no entiendo lo que quiere decir con "objeto de mensaje multiparte de correo electrónico". ¿Te refieres a un objeto que pertenece a la clase email.message.Message
?
Si eso es lo que quiere decir, es sencillo. En un mensaje multiparte, el método get_payload
devuelve una lista de partes del mensaje (cada una de las cuales es en sí misma un objeto Message
). Puede iterar sobre estas partes y examinar sus propiedades: por ejemplo, el método get_content_type
devuelve el tipo MIME de la pieza y el método get_filename
devuelve el nombre de archivo de la parte (si se especifica alguno en el mensaje). Luego, cuando encuentre la parte correcta del mensaje, puede llamar al get_payload(decode=True)
para obtener los contenidos descodificados.
>>> import email
>>> msg = email.message_from_file(open('message.txt'))
>>> len(msg.get_payload())
2
>>> attachment = msg.get_payload()[1]
>>> attachment.get_content_type()
'image/png'
>>> open('attachment.png', 'wb').write(attachment.get_payload(decode=True))
Si va a extraer mediante programación archivos adjuntos de mensajes de correo electrónico que ha recibido, es posible que desee tomar precauciones contra virus y troyanos. En particular, probablemente solo deba extraer archivos adjuntos cuyos tipos MIME sepa que son seguros, y probablemente desee elegir su propio nombre de archivo, o al menos desinfectar el resultado de get_filename
.
Esto funciona genial. Gracias. –
Los correos HTML a menudo tienen imágenes en los pies de página, que también se envían como archivos adjuntos. Puede distinguir estos archivos adjuntos "reales" mirando la disposición del contenido: las imágenes en línea comienzan con "en línea", mientras que los archivos adjuntos reales comienzan con "datos adjuntos". No hay un método para obtener la disposición del contenido, pero puede llamar a part.get ('Content-Disposition'). Startswith ('attachment') si solo está interesado en los archivos adjuntos actuales. – jrial
aquí es solución de trabajo, los mensajes son formulario servidor IMAP
self.imap.select()
typ, data = self.imap.uid('SEARCH', 'ALL')
msgs = data[0].split()
print "Found {0} msgs".format(len(msgs))
for uid in msgs:
typ, s = self.imap.uid('FETCH', uid, '(RFC822)')
mail = email.message_from_string(s[0][1])
print "From: {0}, Subject: {1}, Date: {2}\n".format(mail["From"], mail["Subject"], mail["Date"])
if mail.is_multipart():
print 'multipart'
for part in mail.walk():
ctype = part.get_content_type()
if ctype in ['image/jpeg', 'image/png']:
open(part.get_filename(), 'wb').write(part.get_payload(decode=True))
- 1. Archivos adjuntos de correo electrónico
- 2. ¿Cómo enviar archivos adjuntos de correo electrónico?
- 3. C# Obtener el nombre de archivo de los archivos adjuntos de correo
- 4. Apertura de archivos adjuntos de correo electrónico en Android
- 5. nombre del conjunto de adjuntos de correo electrónico en C#
- 6. Android múltiples archivos adjuntos de correo electrónico con la intención
- 7. Cómo guardar adjuntos de correo electrónico en C#
- 8. archivos adjuntos de correo electrónico dañados en .NET
- 9. impedir que Rails registre archivos adjuntos de correo electrónico
- 10. Extraer archivos adjuntos de correo electrónico en Unix
- 11. sendmailR (Part2): Envío de archivos como archivos adjuntos de correo
- 12. Obtención de contactos de Outlook con Python
- 13. Problema de archivo adjunto de correo electrónico de archivo binario
- 14. Obtención de un estado de objeto
- 15. Extraer los archivos adjuntos al correo electrónico de tuberías a PHP
- 16. Adjuntos ATTnnnnn.txt cuando se recibe un correo electrónico en Outlook
- 17. Obtención objeto número entero de ResultSet
- 18. Cómo enviar un correo electrónico con archivos adjuntos en Ir
- 19. ¿Cómo enviar un correo electrónico con archivos adjuntos utilizando SmtpClient.SendAsync?
- 20. Obtención de un objeto HTMLElement del objeto jQuery
- 21. Ejemplo de envío de un correo electrónico con datos adjuntos a través de Amazon en Java
- 22. Outlook IMAP finalizó el evento de descarga de archivos adjuntos y correo electrónico
- 23. Cómo mostrar "Abrir en ..." cuando un usuario intenta abrir archivos adjuntos de correo electrónico en iOS
- 24. Decodificación MIME (HTML + archivos adjuntos)
- 25. Python ctypes: objeto de archivo Python <-> C FILE *
- 26. Varios archivos adjuntos a través de phpmailer
- 27. JavaMail enviando archivos adjuntos de correo de cadena de caracteres UTF-8
- 28. (Iphone) asociar una aplicación a alguna extensión de archivo para abrir archivos adjuntos en la aplicación de correo
- 29. enviando un correo electrónico con varios archivos adjuntos
- 30. Persistencia de objeto Python
¿Qué parte de la biblioteca de Python que han leído hasta ahora? ¿Has mirado las bibliotecas pop o imap en absoluto? –
Solo me he fijado en email.message.Message y mimetools.Message. Ok, leeré pop y imail y veré qué puedo hacer con él. –