2012-04-11 18 views
7

Estoy tratando de crear un correo electrónico en Django con imágenes en línea.Mostrar imágenes en línea en iPhone, iPad

msg = EmailMultiAlternatives(...) 
image_file = open('file_path', 'rb') 
img = MIMEImage(img_data) 
image_file.close() 
img.add_header('Content-ID', '<image1>') 
img.add_header('Content-Disposition', 'inline') 
msg.attach(img) 
msg.send() 

Y en la plantilla me gustaría hacer referencia a él de este modo:

<img src="cid:image1" /> 

Esto funciona bien en los navegadores web, Outlook, Thunderbird ... todos excepto para el cliente de correo de manzana en OSX, iPad y iPhone. Las imágenes se muestran dos veces. Se colocan en línea correctamente, pero también se adjuntan al final del correo electrónico. Mi pregunta es, ¿cómo me deshago de las imágenes en la parte inferior? o debería abordar las imágenes en los correos electrónicos de manera diferente.

Referencias:
http://djangosnippets.org/snippets/1507/
Django: How to send HTML emails with embedded images
creating a MIME email template with images to send with python/django

+0

Reetiqueta tu pregunta a una etiqueta más específica como "email" o "apple-email" para encontrar personas más interesadas en ella y olvídate de "crear usando el correo electrónico de Django" por el momento. – hynekcer

+0

gracias por el consejo – SunnySydeUp

+0

Adjuntar imágenes (hasta donde yo sé) es un intento de que se muestren por defecto, es decir, sin tener que habilitar "Mostrar todas las imágenes de [email protected]", por lo que la alternativa es usar un URL a una imagen alojada en su servidor. La imagen solo aparecerá una vez, pero podría requerir acción del usuario –

Respuesta

10

diferentes clientes de correo electrónico eligen para hacer multipart/mixed mensajes de diferentes maneras.

La mayoría de los clientes eligen representar cada parte (en un mensaje "multiparte") en línea, en el orden en que se agregaron al correo electrónico. Sin embargo,, si se hace referencia a una imagen en una pieza text/html, la mayoría de los clientes no muestran esa imagen más tarde en como parte del proceso "insertando todas las partes".

Apple Mail en OSX y el IOS son diferentes, en la medida en que se pantalla cada parte en un mensaje multipart/mixed en el orden en que fueron incluidos, con independencia de las referencias internas entre HTML y las imágenes. Esto da como resultado que sus imágenes se muestren una vez dentro de su HTML, y nuevamente al final del mensaje donde se han insertado automáticamente.

La solución es agrupar sus activos HTML y de imagen en una sola parte related. es decir .:

+0

¿Esto muestra el correo electrónico en Gmail sin presionar "Mostrar imágenes ..."? – nelsonvarela

+0

@iAmTheOneAndOnly No lo he probado, pero lo dudo. Incluso si lo hace, es un error en Gmail y debe esperar que lo solucione, así que no confíe en él. –

+0

alguna idea de cómo se puede hacer esto con ruby? ¿ActionMailer? – mirage

Cuestiones relacionadas