| :mod:`email` --- An email and MIME handling package | 
 | =================================================== | 
 |  | 
 | .. module:: email | 
 |    :synopsis: Package supporting the parsing, manipulating, and generating email messages, | 
 |               including MIME documents. | 
 | .. moduleauthor:: Barry A. Warsaw <barry@python.org> | 
 | .. sectionauthor:: Barry A. Warsaw <barry@python.org> | 
 | .. Copyright (C) 2001-2007 Python Software Foundation | 
 |  | 
 |  | 
 | .. versionadded:: 2.2 | 
 |  | 
 | The :mod:`email` package is a library for managing email messages, including | 
 | MIME and other :rfc:`2822`\ -based message documents.  It subsumes most of the | 
 | functionality in several older standard modules such as :mod:`rfc822`, | 
 | :mod:`mimetools`, :mod:`multifile`, and other non-standard packages such as | 
 | :mod:`mimecntl`.  It is specifically *not* designed to do any sending of email | 
 | messages to SMTP (:rfc:`2821`), NNTP, or other servers; those are functions of | 
 | modules such as :mod:`smtplib` and :mod:`nntplib`. The :mod:`email` package | 
 | attempts to be as RFC-compliant as possible, supporting in addition to | 
 | :rfc:`2822`, such MIME-related RFCs as :rfc:`2045`, :rfc:`2046`, :rfc:`2047`, | 
 | and :rfc:`2231`. | 
 |  | 
 | The primary distinguishing feature of the :mod:`email` package is that it splits | 
 | the parsing and generating of email messages from the internal *object model* | 
 | representation of email.  Applications using the :mod:`email` package deal | 
 | primarily with objects; you can add sub-objects to messages, remove sub-objects | 
 | from messages, completely re-arrange the contents, etc.  There is a separate | 
 | parser and a separate generator which handles the transformation from flat text | 
 | to the object model, and then back to flat text again.  There are also handy | 
 | subclasses for some common MIME object types, and a few miscellaneous utilities | 
 | that help with such common tasks as extracting and parsing message field values, | 
 | creating RFC-compliant dates, etc. | 
 |  | 
 | The following sections describe the functionality of the :mod:`email` package. | 
 | The ordering follows a progression that should be common in applications: an | 
 | email message is read as flat text from a file or other source, the text is | 
 | parsed to produce the object structure of the email message, this structure is | 
 | manipulated, and finally, the object tree is rendered back into flat text. | 
 |  | 
 | It is perfectly feasible to create the object structure out of whole cloth --- | 
 | i.e. completely from scratch.  From there, a similar progression can be taken as | 
 | above. | 
 |  | 
 | Also included are detailed specifications of all the classes and modules that | 
 | the :mod:`email` package provides, the exception classes you might encounter | 
 | while using the :mod:`email` package, some auxiliary utilities, and a few | 
 | examples.  For users of the older :mod:`mimelib` package, or previous versions | 
 | of the :mod:`email` package, a section on differences and porting is provided. | 
 |  | 
 | Contents of the :mod:`email` package documentation: | 
 |  | 
 | .. toctree:: | 
 |  | 
 |    email.message.rst | 
 |    email.parser.rst | 
 |    email.generator.rst | 
 |    email.mime.rst | 
 |    email.header.rst | 
 |    email.charset.rst | 
 |    email.encoders.rst | 
 |    email.errors.rst | 
 |    email.util.rst | 
 |    email.iterators.rst | 
 |    email-examples.rst | 
 |  | 
 |  | 
 | .. seealso:: | 
 |  | 
 |    Module :mod:`smtplib` | 
 |       SMTP protocol client | 
 |  | 
 |    Module :mod:`nntplib` | 
 |       NNTP protocol client | 
 |  | 
 |  | 
 | .. _email-pkg-history: | 
 |  | 
 | Package History | 
 | --------------- | 
 |  | 
 | This table describes the release history of the email package, corresponding to | 
 | the version of Python that the package was released with.  For purposes of this | 
 | document, when you see a note about change or added versions, these refer to the | 
 | Python version the change was made in, *not* the email package version.  This | 
 | table also describes the Python compatibility of each version of the package. | 
 |  | 
 | +---------------+------------------------------+-----------------------+ | 
 | | email version | distributed with             | compatible with       | | 
 | +===============+==============================+=======================+ | 
 | | :const:`1.x`  | Python 2.2.0 to Python 2.2.1 | *no longer supported* | | 
 | +---------------+------------------------------+-----------------------+ | 
 | | :const:`2.5`  | Python 2.2.2+ and Python 2.3 | Python 2.1 to 2.5     | | 
 | +---------------+------------------------------+-----------------------+ | 
 | | :const:`3.0`  | Python 2.4                   | Python 2.3 to 2.5     | | 
 | +---------------+------------------------------+-----------------------+ | 
 | | :const:`4.0`  | Python 2.5                   | Python 2.3 to 2.5     | | 
 | +---------------+------------------------------+-----------------------+ | 
 |  | 
 | Here are the major differences between :mod:`email` version 4 and version 3: | 
 |  | 
 | * All modules have been renamed according to :pep:`8` standards.  For example, | 
 |   the version 3 module :mod:`email.Message` was renamed to :mod:`email.message` in | 
 |   version 4. | 
 |  | 
 | * A new subpackage :mod:`email.mime` was added and all the version 3 | 
 |   :mod:`email.MIME\*` modules were renamed and situated into the :mod:`email.mime` | 
 |   subpackage.  For example, the version 3 module :mod:`email.MIMEText` was renamed | 
 |   to :mod:`email.mime.text`. | 
 |  | 
 |   *Note that the version 3 names will continue to work until Python 2.6*. | 
 |  | 
 | * The :mod:`email.mime.application` module was added, which contains the | 
 |   :class:`MIMEApplication` class. | 
 |  | 
 | * Methods that were deprecated in version 3 have been removed.  These include | 
 |   :meth:`Generator.__call__`, :meth:`Message.get_type`, | 
 |   :meth:`Message.get_main_type`, :meth:`Message.get_subtype`. | 
 |  | 
 | * Fixes have been added for :rfc:`2231` support which can change some of the | 
 |   return types for :func:`Message.get_param` and friends.  Under some | 
 |   circumstances, values which used to return a 3-tuple now return simple strings | 
 |   (specifically, if all extended parameter segments were unencoded, there is no | 
 |   language and charset designation expected, so the return type is now a simple | 
 |   string).  Also, %-decoding used to be done for both encoded and unencoded | 
 |   segments; this decoding is now done only for encoded segments. | 
 |  | 
 | Here are the major differences between :mod:`email` version 3 and version 2: | 
 |  | 
 | * The :class:`FeedParser` class was introduced, and the :class:`Parser` class | 
 |   was implemented in terms of the :class:`FeedParser`.  All parsing therefore is | 
 |   non-strict, and parsing will make a best effort never to raise an exception. | 
 |   Problems found while parsing messages are stored in the message's *defect* | 
 |   attribute. | 
 |  | 
 | * All aspects of the API which raised :exc:`DeprecationWarning`\ s in version 2 | 
 |   have been removed.  These include the *_encoder* argument to the | 
 |   :class:`MIMEText` constructor, the :meth:`Message.add_payload` method, the | 
 |   :func:`Utils.dump_address_pair` function, and the functions :func:`Utils.decode` | 
 |   and :func:`Utils.encode`. | 
 |  | 
 | * New :exc:`DeprecationWarning`\ s have been added to: | 
 |   :meth:`Generator.__call__`, :meth:`Message.get_type`, | 
 |   :meth:`Message.get_main_type`, :meth:`Message.get_subtype`, and the *strict* | 
 |   argument to the :class:`Parser` class.  These are expected to be removed in | 
 |   future versions. | 
 |  | 
 | * Support for Pythons earlier than 2.3 has been removed. | 
 |  | 
 | Here are the differences between :mod:`email` version 2 and version 1: | 
 |  | 
 | * The :mod:`email.Header` and :mod:`email.Charset` modules have been added. | 
 |  | 
 | * The pickle format for :class:`Message` instances has changed. Since this was | 
 |   never (and still isn't) formally defined, this isn't considered a backward | 
 |   incompatibility.  However if your application pickles and unpickles | 
 |   :class:`Message` instances, be aware that in :mod:`email` version 2, | 
 |   :class:`Message` instances now have private variables *_charset* and | 
 |   *_default_type*. | 
 |  | 
 | * Several methods in the :class:`Message` class have been deprecated, or their | 
 |   signatures changed.  Also, many new methods have been added.  See the | 
 |   documentation for the :class:`Message` class for details.  The changes should be | 
 |   completely backward compatible. | 
 |  | 
 | * The object structure has changed in the face of :mimetype:`message/rfc822` | 
 |   content types.  In :mod:`email` version 1, such a type would be represented by a | 
 |   scalar payload, i.e. the container message's :meth:`is_multipart` returned | 
 |   false, :meth:`get_payload` was not a list object, but a single :class:`Message` | 
 |   instance. | 
 |  | 
 |   This structure was inconsistent with the rest of the package, so the object | 
 |   representation for :mimetype:`message/rfc822` content types was changed.  In | 
 |   :mod:`email` version 2, the container *does* return ``True`` from | 
 |   :meth:`is_multipart`, and :meth:`get_payload` returns a list containing a single | 
 |   :class:`Message` item. | 
 |  | 
 |   Note that this is one place that backward compatibility could not be completely | 
 |   maintained.  However, if you're already testing the return type of | 
 |   :meth:`get_payload`, you should be fine.  You just need to make sure your code | 
 |   doesn't do a :meth:`set_payload` with a :class:`Message` instance on a container | 
 |   with a content type of :mimetype:`message/rfc822`. | 
 |  | 
 | * The :class:`Parser` constructor's *strict* argument was added, and its | 
 |   :meth:`parse` and :meth:`parsestr` methods grew a *headersonly* argument.  The | 
 |   *strict* flag was also added to functions :func:`email.message_from_file` and | 
 |   :func:`email.message_from_string`. | 
 |  | 
 | * :meth:`Generator.__call__` is deprecated; use :meth:`Generator.flatten` | 
 |   instead.  The :class:`Generator` class has also grown the :meth:`clone` method. | 
 |  | 
 | * The :class:`DecodedGenerator` class in the :mod:`email.Generator` module was | 
 |   added. | 
 |  | 
 | * The intermediate base classes :class:`MIMENonMultipart` and | 
 |   :class:`MIMEMultipart` have been added, and interposed in the class hierarchy | 
 |   for most of the other MIME-related derived classes. | 
 |  | 
 | * The *_encoder* argument to the :class:`MIMEText` constructor has been | 
 |   deprecated.  Encoding  now happens implicitly based on the *_charset* argument. | 
 |  | 
 | * The following functions in the :mod:`email.Utils` module have been deprecated: | 
 |   :func:`dump_address_pairs`, :func:`decode`, and :func:`encode`.  The following | 
 |   functions have been added to the module: :func:`make_msgid`, | 
 |   :func:`decode_rfc2231`, :func:`encode_rfc2231`, and :func:`decode_params`. | 
 |  | 
 | * The non-public function :func:`email.Iterators._structure` was added. | 
 |  | 
 |  | 
 | Differences from :mod:`mimelib` | 
 | ------------------------------- | 
 |  | 
 | The :mod:`email` package was originally prototyped as a separate library called | 
 | `mimelib <http://mimelib.sf.net/>`_. Changes have been made so that method names | 
 | are more consistent, and some methods or modules have either been added or | 
 | removed.  The semantics of some of the methods have also changed.  For the most | 
 | part, any functionality available in :mod:`mimelib` is still available in the | 
 | :mod:`email` package, albeit often in a different way.  Backward compatibility | 
 | between the :mod:`mimelib` package and the :mod:`email` package was not a | 
 | priority. | 
 |  | 
 | Here is a brief description of the differences between the :mod:`mimelib` and | 
 | the :mod:`email` packages, along with hints on how to port your applications. | 
 |  | 
 | Of course, the most visible difference between the two packages is that the | 
 | package name has been changed to :mod:`email`.  In addition, the top-level | 
 | package has the following differences: | 
 |  | 
 | * :func:`messageFromString` has been renamed to :func:`message_from_string`. | 
 |  | 
 | * :func:`messageFromFile` has been renamed to :func:`message_from_file`. | 
 |  | 
 | The :class:`Message` class has the following differences: | 
 |  | 
 | * The method :meth:`asString` was renamed to :meth:`as_string`. | 
 |  | 
 | * The method :meth:`ismultipart` was renamed to :meth:`is_multipart`. | 
 |  | 
 | * The :meth:`get_payload` method has grown a *decode* optional argument. | 
 |  | 
 | * The method :meth:`getall` was renamed to :meth:`get_all`. | 
 |  | 
 | * The method :meth:`addheader` was renamed to :meth:`add_header`. | 
 |  | 
 | * The method :meth:`gettype` was renamed to :meth:`get_type`. | 
 |  | 
 | * The method :meth:`getmaintype` was renamed to :meth:`get_main_type`. | 
 |  | 
 | * The method :meth:`getsubtype` was renamed to :meth:`get_subtype`. | 
 |  | 
 | * The method :meth:`getparams` was renamed to :meth:`get_params`. Also, whereas | 
 |   :meth:`getparams` returned a list of strings, :meth:`get_params` returns a list | 
 |   of 2-tuples, effectively the key/value pairs of the parameters, split on the | 
 |   ``'='`` sign. | 
 |  | 
 | * The method :meth:`getparam` was renamed to :meth:`get_param`. | 
 |  | 
 | * The method :meth:`getcharsets` was renamed to :meth:`get_charsets`. | 
 |  | 
 | * The method :meth:`getfilename` was renamed to :meth:`get_filename`. | 
 |  | 
 | * The method :meth:`getboundary` was renamed to :meth:`get_boundary`. | 
 |  | 
 | * The method :meth:`setboundary` was renamed to :meth:`set_boundary`. | 
 |  | 
 | * The method :meth:`getdecodedpayload` was removed.  To get similar | 
 |   functionality, pass the value 1 to the *decode* flag of the get_payload() | 
 |   method. | 
 |  | 
 | * The method :meth:`getpayloadastext` was removed.  Similar functionality is | 
 |   supported by the :class:`DecodedGenerator` class in the :mod:`email.generator` | 
 |   module. | 
 |  | 
 | * The method :meth:`getbodyastext` was removed.  You can get similar | 
 |   functionality by creating an iterator with :func:`typed_subpart_iterator` in the | 
 |   :mod:`email.iterators` module. | 
 |  | 
 | The :class:`Parser` class has no differences in its public interface. It does | 
 | have some additional smarts to recognize :mimetype:`message/delivery-status` | 
 | type messages, which it represents as a :class:`Message` instance containing | 
 | separate :class:`Message` subparts for each header block in the delivery status | 
 | notification [#]_. | 
 |  | 
 | The :class:`Generator` class has no differences in its public interface.  There | 
 | is a new class in the :mod:`email.generator` module though, called | 
 | :class:`DecodedGenerator` which provides most of the functionality previously | 
 | available in the :meth:`Message.getpayloadastext` method. | 
 |  | 
 | The following modules and classes have been changed: | 
 |  | 
 | * The :class:`MIMEBase` class constructor arguments *_major* and *_minor* have | 
 |   changed to *_maintype* and *_subtype* respectively. | 
 |  | 
 | * The ``Image`` class/module has been renamed to ``MIMEImage``.  The *_minor* | 
 |   argument has been renamed to *_subtype*. | 
 |  | 
 | * The ``Text`` class/module has been renamed to ``MIMEText``.  The *_minor* | 
 |   argument has been renamed to *_subtype*. | 
 |  | 
 | * The ``MessageRFC822`` class/module has been renamed to ``MIMEMessage``.  Note | 
 |   that an earlier version of :mod:`mimelib` called this class/module ``RFC822``, | 
 |   but that clashed with the Python standard library module :mod:`rfc822` on some | 
 |   case-insensitive file systems. | 
 |  | 
 |   Also, the :class:`MIMEMessage` class now represents any kind of MIME message | 
 |   with main type :mimetype:`message`.  It takes an optional argument *_subtype* | 
 |   which is used to set the MIME subtype.  *_subtype* defaults to | 
 |   :mimetype:`rfc822`. | 
 |  | 
 | :mod:`mimelib` provided some utility functions in its :mod:`address` and | 
 | :mod:`date` modules.  All of these functions have been moved to the | 
 | :mod:`email.utils` module. | 
 |  | 
 | The ``MsgReader`` class/module has been removed.  Its functionality is most | 
 | closely supported in the :func:`body_line_iterator` function in the | 
 | :mod:`email.iterators` module. | 
 |  | 
 | .. rubric:: Footnotes | 
 |  | 
 | .. [#] Delivery Status Notifications (DSN) are defined in :rfc:`1894`. |