[Python-es] Enviar imagen con PIL a MIMEImage

Milton Galo Patricio Inostroza Aguilera minoztro en gmail.com
Sab Abr 10 20:32:42 CEST 2010


Estimad en s:

  Hace un tiempo que quiero solucionar un problema que tengo al
pasarle una imagen a MIMEImage utilizando PIL, me explico:

Debo enviar un correo electrónico adjuntando una imagen, para esto
hago lo siguiente:

1.- Construyo la imagen utilizando:

define foo():
    boleta_img = Image.open('archivo_de_plantilla.png')
    boleta_draw = ImageDraw.Draw(boleta_img)
    ...
    luego manipulo boleta_draw para llenar con información la imagen
    ....
    return boleta_img

2.- Envío el correo

     mensaje = MIMEMultipart()
     ...
     boleta_archivo = foo()
     boleta_archivo.save('archivo.png',"PNG")
     boleta = MIMEImage(open('archivo.png','rb').read())
     ...
     se envía el mail utilizando smtplib

Como pueden ver tengo en la memoria la imagen que me retorna la
función foo pero no se la puedo enviar a MIMEImage sin guardarla antes
(si! quiero optimizar esa parte, más bien no realizar esos pasos).  Lo
que he intentado utilizar es el método tostring() de pil y para
enviarle la imagen al constructor de MIMEImage para lo que me llega es
pura basura como imagen adjunta, algo debo estar pasando por alto que
no logro hacerlo funcionar...de la documentación:

PIL:
===
tostring
im.tostring() => string
Returns a string containing pixel data, using the standard "raw" encode


MIMEImage:
==========

__init__(self, _imagedata, _subtype=None, _encoder=<function
encode_base64>, **_params)
Create an image/* type MIME document.

_imagedata is a string containing the raw image data.  If this data
can be decoded by the standard Python `imghdr' module, then the
subtype will be automatically included in the Content-Type header.
Otherwise, you can specify the specific image subtype via the _subtype
parameter.


Gracias por vuestra ayuda, saludos

-- 
Milton Inostroza Aguilera



Más información sobre la lista de distribución Python-es