Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending Multipart html emails which contain embedded images

I've been playing around with the email module in python but I want to be able to know how to embed images which are included in the html.

So for example if the body is something like

<img src="../path/image.png"></img> 

I would like to embed image.png into the email, and the src attribute should be replaced with content-id. Does anybody know how to do this?

like image 544
John Jiang Avatar asked May 28 '09 13:05

John Jiang


People also ask

Can I use PNG in HTML email?

While most of these formats are used for specific purposes and applications, the common 3 formats that are predominantly used in images in HTML emails are JPEG, GIF and PNG.


1 Answers

Here is an example I found.

Recipe 473810: Send an HTML email with embedded image and plain text alternate:

HTML is the method of choice for those wishing to send emails with rich text, layout and graphics. Often it is desirable to embed the graphics within the message so recipients can display the message directly, without further downloads.

Some mail agents don't support HTML or their users prefer to receive plain text messages. Senders of HTML messages should include a plain text message as an alternate for these users.

This recipe sends a short HTML message with a single embedded image and an alternate plain text message.

# Send an HTML email with an embedded image and a plain text message for # email clients that don't want to display the HTML.  from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText from email.MIMEImage import MIMEImage  # Define these once; use them twice! strFrom = '[email protected]' strTo = '[email protected]'  # Create the root message and fill in the from, to, and subject headers msgRoot = MIMEMultipart('related') msgRoot['Subject'] = 'test message' msgRoot['From'] = strFrom msgRoot['To'] = strTo msgRoot.preamble = 'This is a multi-part message in MIME format.'  # Encapsulate the plain and HTML versions of the message body in an # 'alternative' part, so message agents can decide which they want to display. msgAlternative = MIMEMultipart('alternative') msgRoot.attach(msgAlternative)  msgText = MIMEText('This is the alternative plain text message.') msgAlternative.attach(msgText)  # We reference the image in the IMG SRC attribute by the ID we give it below msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>Nifty!', 'html') msgAlternative.attach(msgText)  # This example assumes the image is in the current directory fp = open('test.jpg', 'rb') msgImage = MIMEImage(fp.read()) fp.close()  # Define the image's ID as referenced above msgImage.add_header('Content-ID', '<image1>') msgRoot.attach(msgImage)  # Send the email (this example assumes SMTP authentication is required) import smtplib smtp = smtplib.SMTP() smtp.connect('smtp.example.com') smtp.login('exampleuser', 'examplepass') smtp.sendmail(strFrom, strTo, msgRoot.as_string()) smtp.quit() 
like image 149
Andrew Hare Avatar answered Sep 17 '22 00:09

Andrew Hare