2009-10-21 4 views
1

J'utilise la classe EmailMultiAlternatives pour envoyer du courrier texte et html avec django. Lors d'un test avec un code fictif, j'ai voulu ajouter une image avec du texte.EmailMultiAlternatives ajouter une 3D lors de l'envoi de courrier avec image dans django

msg = EmailMultiAlternatives('My subject','some text here', '[email protected]', ['[email protected]_domain.com']) 
msg.attach_alternative('<p>here is what I was talking about</p> <img src="logo.png" alt="logo_here" /> <div>You see???</div>', 'text/html') 
msg.attach_file('/var/my_site/static/images/logo.png') 
msg.send() 

Le problème est que le client de messagerie de l'image ne montre pas ...

Regarder l'e-mail cru, je trouve ceci:

--===============1013820581535380480== 
Content-Type: text/html; charset="utf-8" 
MIME-Version: 1.0 
Content-Transfer-Encoding: quoted-printable 

<p>here is what I was talking about</p> <img src=3D"logo.png" alt=3D"logo_h= 
ere" /> <div>You see???</div> 
--===============1013820581535380480==-- 

Est-ce que quelqu'un a une idée de ce que je fais mal ??

Merci!

Editer: Je pourrais réussir à intégrer une image dans le courrier HTML. Il semble que EmailMultiAlternatives possède une méthode attach qui peut accepter un objet MimeImage. En fait, il peut accepter tout ce qui hérite de MimeBase.

fp = open('test.jpg', 'rb') 
msgImage = MIMEImage(fp.read()) 
fp.close() 

mimeImage = MimeImage(fp.read()) 
mimeImage.add_header('Content-ID', '<logo.png>') 
msg.attach(mimeImage) 
msg.send() 

Répondre

1

Ceci est seulement une solution partielle. Lorsque je crée un e-mail dans thunderbird et embed une image (il est visible quand je vois le message), la source ressemble à ceci:

--------------070800070205000904000708 
Content-Type: text/html; charset=UTF-8 
Content-Transfer-Encoding: 7bit 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
</head> 
<body bgcolor="#ffffff" text="#000000"> 
<img alt="asdsa" src="cid:[email protected]" 
height="38" width="150"><br> 
</body> 
</html> 

--------------070800070205000904000708 
Content-Type: image/jpeg; 
name="added.jpg" 
Content-Transfer-Encoding: base64 
Content-ID: <[email protected]> 
Content-Disposition: inline; 
filename="added.jpg" 

puis le contenu du suivi de l'image. L'URL de la balise d'image doit être le Content-ID de l'image jointe. Je ne suis pas sûr de savoir comment le spécifier.

EDIT: Il semble que vous pouvez le faire avec le module email de la bibliothèque standard au lieu de EmailMultiAlternatives de Django. Voir ici: http://code.activestate.com/recipes/473810/

4

J'ai eu le même problème et voici ce que je trouve:

Tout d'abord, un avertissement. Je ne connais pas grand-chose aux normes de messagerie électronique. C'est ce que j'ai trouvé après avoir cherché, lu et expérimenté. À ma connaissance, cela fonctionne. 1) Le problème avec les images non affichées est que les classes EmailMessage (et EmailMultiAlternatives) dans Django utilisent le type de contenu "multipart/mixed" pour le message, alors qu'en fait vous avez besoin de "multipart/related". Ce qui a fonctionné pour moi était:

msg = EmailMultiAlternatives() 
msg.mixed_subtype = 'related' 

Thats it!

2) Le problème d'affichage 3D ne devrait pas affecter votre message. Je pense que cela fait partie de la spécification 'citée imprimable'. Si vous ne l'aimez pas et vous préférez un 8bit ou 7bit essayer ce en haut de votre fichier:

from email import Charset 
# Due to http://code.djangoproject.com/ticket/11212 
Charset.add_charset('utf-8',Charset.SHORTEST,None,'utf-8') 

Comme le commentaire suggets, je suis arrivé ce de ce billet django.

Je sais que cette question est assez ancienne, mais il n'y avait pas de réponse qui me satisfait et était le seul qui est apparu sur une recherche google sur ce problème.

+0

Ceci l'a fixé pour moi! Juste une petite faute de frappe, ça devrait être msg.mixed_subtype = 'related' pas relatif ... –

Questions connexes