<!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.0 Transitional//EN">
<link rel=
"STYLESHEET" href=
"lib.css" type='text/css'
/>
<link rel=
"SHORTCUT ICON" href=
"../icons/pyfav.png" type=
"image/png" />
<link rel='start' href='../index.html' title='Python Documentation Index'
/>
<link rel=
"first" href=
"lib.html" title='Python Library Reference'
/>
<link rel='contents' href='contents.html'
title=
"Contents" />
<link rel='index' href='genindex.html' title='Index'
/>
<link rel='last' href='about.html' title='About this document...'
/>
<link rel='help' href='about.html' title='About this document...'
/>
<link rel=
"prev" href=
"node596.html" />
<link rel=
"parent" href=
"module-email.html" />
<link rel=
"next" href=
"module-mailcap.html" />
<meta name='aesop' content='information'
/>
<title>12.2.13 Examples
</title>
<div id='top-navigation-panel' xml:id='top-navigation-panel'
>
<table align=
"center" width=
"100%" cellpadding=
"0" cellspacing=
"2">
<td class='online-navigation'
><a rel=
"prev" title=
"12.2.12 Differences from mimelib"
href=
"node596.html"><img src='../icons/previous.png'
border='
0' height='
32' alt='Previous Page' width='
32'
/></A></td>
<td class='online-navigation'
><a rel=
"parent" title=
"12.2 email "
href=
"module-email.html"><img src='../icons/up.png'
border='
0' height='
32' alt='Up One Level' width='
32'
/></A></td>
<td class='online-navigation'
><a rel=
"next" title=
"12.3 mailcap "
href=
"module-mailcap.html"><img src='../icons/next.png'
border='
0' height='
32' alt='Next Page' width='
32'
/></A></td>
<td align=
"center" width=
"100%">Python Library Reference
</td>
<td class='online-navigation'
><a rel=
"contents" title=
"Table of Contents"
href=
"contents.html"><img src='../icons/contents.png'
border='
0' height='
32' alt='Contents' width='
32'
/></A></td>
<td class='online-navigation'
><a href=
"modindex.html" title=
"Module Index"><img src='../icons/modules.png'
border='
0' height='
32' alt='Module Index' width='
32'
/></a></td>
<td class='online-navigation'
><a rel=
"index" title=
"Index"
href=
"genindex.html"><img src='../icons/index.png'
border='
0' height='
32' alt='Index' width='
32'
/></A></td>
<div class='online-navigation'
>
<b class=
"navlabel">Previous:
</b>
<a class=
"sectref" rel=
"prev" href=
"node596.html">12.2.12 Differences from mimelib
</A>
<b class=
"navlabel">Up:
</b>
<a class=
"sectref" rel=
"parent" href=
"module-email.html">12.2 email
</A>
<b class=
"navlabel">Next:
</b>
<a class=
"sectref" rel=
"next" href=
"module-mailcap.html">12.3 mailcap
</A>
<!--End of Navigation Panel-->
<H2><A NAME=
"SECTION00142130000000000000000">
Here are a few examples of how to use the
<tt class=
"module">email
</tt> package to
read, write, and send simple email messages, as well as more complex
First, let's see how to create and send a simple text message:
<pre># Import smtplib for the actual sending function
# Import the email modules we'll need
from email.MIMEText import MIMEText
# Open a plain text file for reading. For this example, assume that
# the text file contains only ASCII characters.
fp = open(textfile, 'rb')
# Create a text/plain message
msg = MIMEText(fp.read())
# me == the sender's email address
# you == the recipient's email address
msg['Subject'] = 'The contents of %s' % textfile
# Send the message via our own SMTP server, but don't include the
s.sendmail(me, [you], msg.as_string())
<a href=
"email-simple.txt" type=
"text/plain">Download as text (original file name:
<span class=
"file">email-simple.py
</span>).
</a>
Here's an example of how to send a MIME message containing a bunch of
family pictures that may be residing in a directory:
<pre># Import smtplib for the actual sending function
# Here are the email pacakge modules we'll need
from email.MIMEImage import MIMEImage
from email.MIMEMultipart import MIMEMultipart
# Create the container (outer) email message.
msg['Subject'] = 'Our family reunion'
# me == the sender's email address
# family = the list of all recipients' email addresses
msg['To'] = COMMASPACE.join(family)
msg.preamble = 'Our family reunion'
# Guarantees the message ends in a newline
# Assume we know that the image files are all in PNG format
# Open the files in binary mode. Let the MIMEImage class automatically
# guess the specific image type.
img = MIMEImage(fp.read())
# Send the email via our own SMTP server.
s.sendmail(me, family, msg.as_string())
<a href=
"email-mime.txt" type=
"text/plain">Download as text (original file name:
<span class=
"file">email-mime.py
</span>).
</a>
Here's an example of how to send the entire contents of a directory as
HREF=
"#foot58630"><SUP>12.5</SUP></A>
<pre>#!/usr/bin/env python
"""Send the contents of a directory as a MIME message.
Usage: dirmail [options] from to [to ...]*
Print this message and exit.
--directory=directory
Mail the contents of the specified directory, otherwise use the
current directory. Only the regular files in the directory are sent,
and we don't recurse to subdirectories.
`from' is the email address of the sender of the message.
`to' is the email address of the recipient of the message, and multiple
The email is sent by forwarding to your local SMTP server, which then does the
normal delivery process. Your local machine must be running an SMTP server.
# For guessing MIME type based on file name extension
from email import Encoders
from email.Message import Message
from email.MIMEAudio import MIMEAudio
from email.MIMEBase import MIMEBase
from email.MIMEMultipart import MIMEMultipart
from email.MIMEImage import MIMEImage
from email.MIMEText import MIMEText
print
>> sys.stderr, __doc__
print
>> sys.stderr, msg
opts, args = getopt.getopt(sys.argv[
1:], 'hd:', ['help', 'directory='])
except getopt.error, msg:
if opt in ('-h', '-
-help'):
elif opt in ('-d', '-
-directory'):
# Create the enclosing (outer) message
outer['Subject'] = 'Contents of directory %s' % os.path.abspath(dir)
outer['To'] = COMMASPACE.join(recips)
outer.preamble = 'You will not see this in a MIME-aware mail reader.
\n'
# To guarantee the message ends with a newline
for filename in os.listdir(dir):
path = os.path.join(dir, filename)
if not os.path.isfile(path):
# Guess the content type based on the file's extension. Encoding
# will be ignored, although we should check for simple things like
# gzip'd or compressed files.
ctype, encoding = mimetypes.guess_type(path)
if ctype is None or encoding is not None:
# No guess could be made, or the file is encoded (compressed), so
# use a generic bag-of-bits type.
ctype = 'application/octet-stream'
maintype, subtype = ctype.split('/',
1)
# Note: we should handle calculating the charset
msg = MIMEText(fp.read(), _subtype=subtype)
elif maintype == 'image':
msg = MIMEImage(fp.read(), _subtype=subtype)
elif maintype == 'audio':
msg = MIMEAudio(fp.read(), _subtype=subtype)
msg = MIMEBase(maintype, subtype)
msg.set_payload(fp.read())
# Encode the payload using Base64
Encoders.encode_base64(msg)
# Set the filename parameter
msg.add_header('Content-Disposition', 'attachment', filename=filename)
s.sendmail(sender, recips, outer.as_string())
if __name__ == '__main__':
<a href=
"email-dir.txt" type=
"text/plain">Download as text (original file name:
<span class=
"file">email-dir.py
</span>).
</a>
And finally, here's an example of how to unpack a MIME message like
the one above, into a directory of files:
<pre>#!/usr/bin/env python
"""Unpack a MIME message into a directory of files.
Usage: unpackmail [options] msgfile
Print this message and exit.
--directory=directory
Unpack the MIME message into the named directory, which will be
created if it doesn't already exist.
msgfile is the path to the file containing the MIME message.
print
>> sys.stderr, __doc__
print
>> sys.stderr, msg
opts, args = getopt.getopt(sys.argv[
1:], 'hd:', ['help', 'directory='])
except getopt.error, msg:
if opt in ('-h', '-
-help'):
elif opt in ('-d', '-
-directory'):
# Ignore directory exists error
if e.errno
<> errno.EEXIST: raise
msg = email.message_from_file(fp)
# multipart/* are just containers
if part.get_content_maintype() == 'multipart':
# Applications should really sanitize the given filename so that an
# email message can't be used to overwrite important files
filename = part.get_filename()
ext = mimetypes.guess_extension(part.get_type())
# Use a generic bag-of-bits extension
filename = 'part-%
03d%s' % (counter, ext)
fp = open(os.path.join(dir, filename), 'wb')
fp.write(part.get_payload(decode=
1))
if __name__ == '__main__':
<a href=
"email-unpack.txt" type=
"text/plain">Download as text (original file name:
<span class=
"file">email-unpack.py
</span>).
</a>
<BR><HR><H4>Footnotes
</H4>
<DT><A NAME=
"foot58630">... message:
</A><A
HREF=
"node597.html#tex2html137"><SUP>12.5</SUP></A></DT>
<DD>Thanks to Matthew Dixon Cowles for the original inspiration
<div class='online-navigation'
>
<table align=
"center" width=
"100%" cellpadding=
"0" cellspacing=
"2">
<td class='online-navigation'
><a rel=
"prev" title=
"12.2.12 Differences from mimelib"
href=
"node596.html"><img src='../icons/previous.png'
border='
0' height='
32' alt='Previous Page' width='
32'
/></A></td>
<td class='online-navigation'
><a rel=
"parent" title=
"12.2 email "
href=
"module-email.html"><img src='../icons/up.png'
border='
0' height='
32' alt='Up One Level' width='
32'
/></A></td>
<td class='online-navigation'
><a rel=
"next" title=
"12.3 mailcap "
href=
"module-mailcap.html"><img src='../icons/next.png'
border='
0' height='
32' alt='Next Page' width='
32'
/></A></td>
<td align=
"center" width=
"100%">Python Library Reference
</td>
<td class='online-navigation'
><a rel=
"contents" title=
"Table of Contents"
href=
"contents.html"><img src='../icons/contents.png'
border='
0' height='
32' alt='Contents' width='
32'
/></A></td>
<td class='online-navigation'
><a href=
"modindex.html" title=
"Module Index"><img src='../icons/modules.png'
border='
0' height='
32' alt='Module Index' width='
32'
/></a></td>
<td class='online-navigation'
><a rel=
"index" title=
"Index"
href=
"genindex.html"><img src='../icons/index.png'
border='
0' height='
32' alt='Index' width='
32'
/></A></td>
<div class='online-navigation'
>
<b class=
"navlabel">Previous:
</b>
<a class=
"sectref" rel=
"prev" href=
"node596.html">12.2.12 Differences from mimelib
</A>
<b class=
"navlabel">Up:
</b>
<a class=
"sectref" rel=
"parent" href=
"module-email.html">12.2 email
</A>
<b class=
"navlabel">Next:
</b>
<a class=
"sectref" rel=
"next" href=
"module-mailcap.html">12.3 mailcap
</A>
<span class=
"release-info">Release
2.4.2, documentation updated on
28 September
2005.
</span>
<!--End of Navigation Panel-->
See
<i><a href=
"about.html">About this document...
</a></i> for information on suggesting changes.