diff --git a/Doc/lib/email.tex b/Doc/lib/email.tex
index cbbcf87..c80305f 100644
--- a/Doc/lib/email.tex
+++ b/Doc/lib/email.tex
@@ -289,15 +289,14 @@
 # Import smtplib for the actual sending function
 import smtplib
 
-# Here are the email pacakge modules we'll need
-from email import Encoders
+# Import the email modules we'll need
 from email.MIMEText import MIMEText
 
-# Open a plain text file for reading
-fp = open(textfile)
-# Create a text/plain message, using Quoted-Printable encoding for non-ASCII
-# characters.
-msg = MIMEText(fp.read(), _encoder=Encoders.encode_quopri)
+# 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())
 fp.close()
 
 # me == the sender's email address
@@ -306,16 +305,16 @@
 msg['From'] = me
 msg['To'] = you
 
-# Send the message via our own SMTP server.  Use msg.as_string() with
-# unixfrom=0 so as not to confuse SMTP.
+# Send the message via our own SMTP server, but don't include the
+# envelope header.
 s = smtplib.SMTP()
 s.connect()
-s.sendmail(me, [you], msg.as_string(0))
+s.sendmail(me, [you], msg.as_string())
 s.close()
 \end{verbatim}
 
 Here's an example of how to send a MIME message containing a bunch of
-family pictures:
+family pictures that may be residing in a directory:
 
 \begin{verbatim}
 # Import smtplib for the actual sending function
@@ -323,15 +322,15 @@
 
 # Here are the email pacakge modules we'll need
 from email.MIMEImage import MIMEImage
-from email.MIMEBase import MIMEBase
+from email.MIMEMultipart import MIMEMultipart
 
 COMMASPACE = ', '
 
 # Create the container (outer) email message.
+msg = MIMEMultipart()
+msg['Subject'] = 'Our family reunion'
 # me == the sender's email address
 # family = the list of all recipients' email addresses
-msg = MIMEBase('multipart', 'mixed')
-msg['Subject'] = 'Our family reunion'
 msg['From'] = me
 msg['To'] = COMMASPACE.join(family)
 msg.preamble = 'Our family reunion'
@@ -340,7 +339,7 @@
 
 # Assume we know that the image files are all in PNG format
 for file in pngfiles:
-    # Open the files in binary mode.  Let the MIMEIMage class automatically
+    # Open the files in binary mode.  Let the MIMEImage class automatically
     # guess the specific image type.
     fp = open(file, 'rb')
     img = MIMEImage(fp.read())
@@ -350,7 +349,7 @@
 # Send the email via our own SMTP server.
 s = smtplib.SMTP()
 s.connect()
-s.sendmail(me, family, msg.as_string(unixfrom=0))
+s.sendmail(me, family, msg.as_string())
 s.close()
 \end{verbatim}
 
@@ -394,7 +393,7 @@
 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
 
@@ -428,7 +427,7 @@
     recips = args[1:]
     
     # Create the enclosing (outer) message
-    outer = MIMEBase('multipart', 'mixed')
+    outer = MIMEMultipart()
     outer['Subject'] = 'Contents of directory %s' % os.path.abspath(dir)
     outer['To'] = COMMASPACE.join(recips)
     outer['From'] = sender
@@ -440,9 +439,9 @@
         path = os.path.join(dir, filename)
         if not os.path.isfile(path):
             continue
-        # Guess the Content-Type: based on the file's extension.  Encoding
+        # 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
+        # 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
@@ -465,7 +464,7 @@
         else:
             fp = open(path, 'rb')
             msg = MIMEBase(maintype, subtype)
-            msg.add_payload(fp.read())
+            msg.set_payload(fp.read())
             fp.close()
             # Encode the payload using Base64
             Encoders.encode_base64(msg)
@@ -473,14 +472,10 @@
         msg.add_header('Content-Disposition', 'attachment', filename=filename)
         outer.attach(msg)
 
-    fp = open('/tmp/debug.pck', 'w')
-    import cPickle
-    cPickle.dump(outer, fp)
-    fp.close()
     # Now send the message
     s = smtplib.SMTP()
     s.connect()
-    s.sendmail(sender, recips, outer.as_string(0))
+    s.sendmail(sender, recips, outer.as_string())
     s.close()
 
 
@@ -556,7 +551,7 @@
     counter = 1
     for part in msg.walk():
         # multipart/* are just containers
-        if part.get_main_type() == 'multipart':
+        if part.get_content_maintype() == 'multipart':
             continue
         # Applications should really sanitize the given filename so that an
         # email message can't be used to overwrite important files
