|I l@ve RuBoard|
10.10 Sending Multipart MIME Email
Credit: Richard Jones, Michael Strasser
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( )
smtp = smtplib.SMTP('smtp.server.address') smtp.sendmail('email@example.com', 'firstname.lastname@example.org', 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.
10.10.4 See Also
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).
|I l@ve RuBoard|