Envoyer un e-mail à Gmail avec image en ligne à l'aide de Python

Mon objectif est d'utiliser Python pour envoyer un e-mail à un utilisateur de Gmail qui a une image en ligne. Il n'est pas possible d'héberger cette image en ligne et de les lier à elle par l'intermédiaire d'un href, en raison de la nature sensible des images (données à partir de mon travail).

J'ai essayé de codage de la base64 version HTML puis l'envoi de th est HTML, mais c'est bien connu pour ne pas travailler. J'ai alors remarqué que dans Gmail, vous pouvez glisser-déposer une image dans le cadre d'envoyer la boîte et elle sera insérée dans l'extrémité de réception. Compte tenu de cela j'ai ensuite essayé d'envoyer un e-mail à partir de Python avec l'image en pièce jointe. Cela se voit dans le code ci-dessous, mais, malheureusement, l'image ne s'affiche pas dans la ligne.

Ma question est donc: Comment envoyer l'image telle qu'elle se montre inline?

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders
import os

gmail_user = "[email protected]"
gmail_pwd = "pass"

to = "[email protected]"
subject = "Report"
text = "Picture report"
attach = 'TESTING.png'

msg = MIMEMultipart()

msg['From'] = gmail_user
msg['To'] = to
msg['Subject'] = subject

msg.attach(MIMEText(text))

part = MIMEBase('application', 'octet-stream')
part.set_payload(open(attach, 'rb').read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition',
   'attachment; filename="%s"' % os.path.basename(attach))
msg.attach(part)

mailServer = smtplib.SMTP("smtp.gmail.com", 587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(gmail_user, gmail_pwd)
mailServer.sendmail(gmail_user, to, msg.as_string())
# Should be mailServer.quit(), but that crashes...
mailServer.close()

Lorsque j'envoie l'image en ligne à moi-même manuellement, c'est ce que le "e-mail d'origine" ressemble à:

  Content-Type: multipart/related; boundary=047d7bd761fe73e03304e7e02237

--047d7bd761fe73e03304e7e02237
Content-Type: multipart/alternative; boundary=047d7bd761fe73e03004e7e02236

--047d7bd761fe73e03004e7e02236
Content-Type: text/plain; charset=ISO-8859-1

[image: Inline images 1]

--047d7bd761fe73e03004e7e02236
Content-Type: text/html; charset=ISO-8859-1

<div dir="ltr"><img alt="Inline images 1" src="cid:ii_141810ee4ae92ac6" height="400" width="534"><br></div>

--047d7bd761fe73e03004e7e02236--
--047d7bd761fe73e03304e7e02237
Content-Type: image/png; name="Testing.png"
Content-Transfer-Encoding: base64
Content-ID: <ii_141810ee4ae92ac6>
X-Attachment-Id: ii_141810ee4ae92ac6

Quand je les envoie à moi-même par Python comme une pièce jointe, c'est très différent:

Content-Type: multipart/mixed; boundary="===============6881579935569047077=="
MIME-Version: 1.0
(.... some stuff deleted here)
--===============6881579935569047077==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

See attachment for report.
--===============6881579935569047077==
Content-Type: application/octet-stream
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="TESTING.png"
  • Je sais je suis en retard à la fête, mais j'ai mis en place un facile d'envoi de la classe pour des trucs comme ça, puisque moi-même j'ai besoin de l'utiliser chaque maintenant et puis datamakessense.com/...
InformationsquelleAutor user2763361 | 2013-10-04