Credit: Richard Jones, Michael Strasser
You need to put together a
multipart MIME email message to be sent with
smtplib
(or by other means).
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('[email protected]', '[email protected]', message.getvalue( )) smtp.quit( )
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.
Of course, you could wrap this kind of functionality up in a class,
which is what Dirk Holtwick has done. (See his solution at
http://sourceforge.net/snippet/detail.php?type=snippet&id=100444.)
In Python 2.2, the new email
package in the
standard library offers an excellent alternative for handling email
messages, such as documents compatible with RFC 2822 (which
superseded the earlier RFC 822) that include MIME functionality.
Recipe 10.11 shows how the
email
package can be used to compose a MIME
multipart message.
Recipe 10.9 and Recipe 10.11; documentation for the standard library
modules email
, smtplib
,
MimeWriter
, base64
, and
StringIO
in the Library Reference; the IETF RFC archive (http://www.ietf.org/rfc.html); the
MimeMail snippet (http://sourceforge.net/snippet/detail.php?type=snippet&id=100444).