18.1. email — An email and MIME handling package — Python v2.7 documentation (original) (raw)

New in version 2.2.

The 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 rfc822,mimetools, multifile, and other non-standard packages such asmimecntl. 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 smtplib and nntplib. The email package attempts to be as RFC-compliant as possible, supporting in addition toRFC 2822, such MIME-related RFCs as RFC 2045, RFC 2046, RFC 2047, and RFC 2231.

The primary distinguishing feature of the email package is that it splits the parsing and generating of email messages from the internal _object model_representation of email. Applications using the 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 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 email package provides, the exception classes you might encounter while using the email package, some auxiliary utilities, and a few examples. For users of the older mimelib package, or previous versions of the email package, a section on differences and porting is provided.

Contents of the email package documentation:

See also

Module smtplib

SMTP protocol client

Module nntplib

NNTP protocol client

18.1.12. 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
1.x Python 2.2.0 to Python 2.2.1 no longer supported
2.5 Python 2.2.2+ and Python 2.3 Python 2.1 to 2.5
3.0 Python 2.4 Python 2.3 to 2.5
4.0 Python 2.5 Python 2.3 to 2.5

Here are the major differences between email version 4 and version 3:

Here are the major differences between email version 3 and version 2:

Here are the differences between email version 2 and version 1:

18.1.13. Differences from mimelib

The email package was originally prototyped as a separate library calledmimelib. 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 mimelib is still available in theemail package, albeit often in a different way. Backward compatibility between the mimelib package and the email package was not a priority.

Here is a brief description of the differences between the mimelib and the 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 email. In addition, the top-level package has the following differences:

The Message class has the following differences:

The Parser class has no differences in its public interface. It does have some additional smarts to recognize _message/delivery-status_type messages, which it represents as a Message instance containing separate Message subparts for each header block in the delivery status notification [1].

The Generator class has no differences in its public interface. There is a new class in the email.generator module though, calledDecodedGenerator which provides most of the functionality previously available in the Message.getpayloadastext() method.

The following modules and classes have been changed:

mimelib provided some utility functions in its address anddate modules. All of these functions have been moved to theemail.utils module.

The MsgReader class/module has been removed. Its functionality is most closely supported in the body_line_iterator() function in theemail.iterators module.

Footnotes

[1] Delivery Status Notifications (DSN) are defined in RFC 1894.