Sending Multipart MIME Email
Credit: Richard Jones, Michael Strasser
Problem
You need to put together a
multipart MIME email message to be sent with
smtplib (or by other means).
Solution
Multipart messages can be composed with the
MimeWriter module:
import sys, smtplib, MimeWriter, base64, StringIO
message = StringIO.StringIO( )
writer = MimeWriter.MimeWriter(message)
writer.addheader('Subject', 'The kitten picture')
writer.startmultipartbody('mixed')
# Start off with a text/plain part
part = writer.nextpart( )
body = part.startbody('text/plain')
body.write('This is a picture of a kitten, enjoy :)')
# Now add an image part
part = writer.nextpart( )
part.addheader('Content-Transfer-Encoding', 'base64')
body = part.startbody('image/jpeg; name=kitten.jpg')
base64.encode(open('kitten.jpg', 'rb'), body)
# Finish it off
writer.lastpart( )Once you have composed a suitable message, you can send it with the
smtplib module:
smtp = smtplib.SMTP('smtp.server.address')
smtp.sendmail('from@from.address', 'to@to.address', message.getvalue( ))
smtp.quit( )Discussion
The order of the calls to the writer is
important. Note that headers are always added before body content.
The top-level body is added with a subtype of
'mixed', which is appropriate for mixed content,
such as that of this recipe. Other subtypes can be found in RFC 1521
(e.g., 'mixed', 'alternative',
'digest', and 'parallel'), RFC
1847 (e.g., 'signed' and
'encrypted'), and RFC 2387
('related'). Each RFC is available at http://www.ietf.org/rfc ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access