blob: 879c38f9aabe698c5311ceafacedbe5cad0e9160 [file] [log] [blame]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001:mod:`email` --- An email and MIME handling package
2===================================================
3
4.. module:: email
5 :synopsis: Package supporting the parsing, manipulating, and generating email messages,
6 including MIME documents.
7.. moduleauthor:: Barry A. Warsaw <barry@python.org>
8.. sectionauthor:: Barry A. Warsaw <barry@python.org>
Georg Brandlb19be572007-12-29 10:57:00 +00009.. Copyright (C) 2001-2007 Python Software Foundation
Georg Brandl8ec7f652007-08-15 14:28:01 +000010
11
12.. versionadded:: 2.2
13
14The :mod:`email` package is a library for managing email messages, including
15MIME and other :rfc:`2822`\ -based message documents. It subsumes most of the
16functionality in several older standard modules such as :mod:`rfc822`,
17:mod:`mimetools`, :mod:`multifile`, and other non-standard packages such as
18:mod:`mimecntl`. It is specifically *not* designed to do any sending of email
19messages to SMTP (:rfc:`2821`), NNTP, or other servers; those are functions of
20modules such as :mod:`smtplib` and :mod:`nntplib`. The :mod:`email` package
21attempts to be as RFC-compliant as possible, supporting in addition to
22:rfc:`2822`, such MIME-related RFCs as :rfc:`2045`, :rfc:`2046`, :rfc:`2047`,
23and :rfc:`2231`.
24
25The primary distinguishing feature of the :mod:`email` package is that it splits
26the parsing and generating of email messages from the internal *object model*
27representation of email. Applications using the :mod:`email` package deal
28primarily with objects; you can add sub-objects to messages, remove sub-objects
29from messages, completely re-arrange the contents, etc. There is a separate
30parser and a separate generator which handles the transformation from flat text
31to the object model, and then back to flat text again. There are also handy
32subclasses for some common MIME object types, and a few miscellaneous utilities
33that help with such common tasks as extracting and parsing message field values,
34creating RFC-compliant dates, etc.
35
36The following sections describe the functionality of the :mod:`email` package.
37The ordering follows a progression that should be common in applications: an
38email message is read as flat text from a file or other source, the text is
39parsed to produce the object structure of the email message, this structure is
40manipulated, and finally, the object tree is rendered back into flat text.
41
42It is perfectly feasible to create the object structure out of whole cloth ---
43i.e. completely from scratch. From there, a similar progression can be taken as
44above.
45
46Also included are detailed specifications of all the classes and modules that
47the :mod:`email` package provides, the exception classes you might encounter
48while using the :mod:`email` package, some auxiliary utilities, and a few
49examples. For users of the older :mod:`mimelib` package, or previous versions
50of the :mod:`email` package, a section on differences and porting is provided.
51
52Contents of the :mod:`email` package documentation:
53
54.. toctree::
55
56 email.message.rst
57 email.parser.rst
58 email.generator.rst
59 email.mime.rst
60 email.header.rst
61 email.charset.rst
62 email.encoders.rst
63 email.errors.rst
64 email.util.rst
65 email.iterators.rst
66 email-examples.rst
67
68
69.. seealso::
70
71 Module :mod:`smtplib`
72 SMTP protocol client
73
74 Module :mod:`nntplib`
75 NNTP protocol client
76
77
78.. _email-pkg-history:
79
80Package History
81---------------
82
83This table describes the release history of the email package, corresponding to
84the version of Python that the package was released with. For purposes of this
85document, when you see a note about change or added versions, these refer to the
86Python version the change was made in, *not* the email package version. This
87table also describes the Python compatibility of each version of the package.
88
89+---------------+------------------------------+-----------------------+
90| email version | distributed with | compatible with |
91+===============+==============================+=======================+
92| :const:`1.x` | Python 2.2.0 to Python 2.2.1 | *no longer supported* |
93+---------------+------------------------------+-----------------------+
94| :const:`2.5` | Python 2.2.2+ and Python 2.3 | Python 2.1 to 2.5 |
95+---------------+------------------------------+-----------------------+
96| :const:`3.0` | Python 2.4 | Python 2.3 to 2.5 |
97+---------------+------------------------------+-----------------------+
98| :const:`4.0` | Python 2.5 | Python 2.3 to 2.5 |
99+---------------+------------------------------+-----------------------+
100
101Here are the major differences between :mod:`email` version 4 and version 3:
102
103* All modules have been renamed according to :pep:`8` standards. For example,
104 the version 3 module :mod:`email.Message` was renamed to :mod:`email.message` in
105 version 4.
106
107* A new subpackage :mod:`email.mime` was added and all the version 3
108 :mod:`email.MIME\*` modules were renamed and situated into the :mod:`email.mime`
109 subpackage. For example, the version 3 module :mod:`email.MIMEText` was renamed
110 to :mod:`email.mime.text`.
111
112 *Note that the version 3 names will continue to work until Python 2.6*.
113
114* The :mod:`email.mime.application` module was added, which contains the
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300115 :class:`~email.mime.application.MIMEApplication` class.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000116
117* Methods that were deprecated in version 3 have been removed. These include
118 :meth:`Generator.__call__`, :meth:`Message.get_type`,
119 :meth:`Message.get_main_type`, :meth:`Message.get_subtype`.
120
121* Fixes have been added for :rfc:`2231` support which can change some of the
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300122 return types for :func:`Message.get_param <email.message.Message.get_param>`
123 and friends. Under some
Georg Brandl8ec7f652007-08-15 14:28:01 +0000124 circumstances, values which used to return a 3-tuple now return simple strings
125 (specifically, if all extended parameter segments were unencoded, there is no
126 language and charset designation expected, so the return type is now a simple
127 string). Also, %-decoding used to be done for both encoded and unencoded
128 segments; this decoding is now done only for encoded segments.
129
130Here are the major differences between :mod:`email` version 3 and version 2:
131
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300132* The :class:`~email.parser.FeedParser` class was introduced, and the
133 :class:`~email.parser.Parser` class was implemented in terms of the
134 :class:`~email.parser.FeedParser`. All parsing therefore is
Georg Brandl8ec7f652007-08-15 14:28:01 +0000135 non-strict, and parsing will make a best effort never to raise an exception.
136 Problems found while parsing messages are stored in the message's *defect*
137 attribute.
138
139* All aspects of the API which raised :exc:`DeprecationWarning`\ s in version 2
140 have been removed. These include the *_encoder* argument to the
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300141 :class:`~email.mime.text.MIMEText` constructor, the
142 :meth:`Message.add_payload` method, the :func:`Utils.dump_address_pair`
143 function, and the functions :func:`Utils.decode` and :func:`Utils.encode`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000144
145* New :exc:`DeprecationWarning`\ s have been added to:
146 :meth:`Generator.__call__`, :meth:`Message.get_type`,
147 :meth:`Message.get_main_type`, :meth:`Message.get_subtype`, and the *strict*
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300148 argument to the :class:`~email.parser.Parser` class. These are expected to
149 be removed in future versions.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000150
151* Support for Pythons earlier than 2.3 has been removed.
152
153Here are the differences between :mod:`email` version 2 and version 1:
154
155* The :mod:`email.Header` and :mod:`email.Charset` modules have been added.
156
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300157* The pickle format for :class:`~email.message.Message` instances has changed.
158 Since this was never (and still isn't) formally defined, this isn't
159 considered a backward incompatibility. However if your application pickles
160 and unpickles :class:`~email.message.Message` instances, be aware that in
161 :mod:`email` version 2, :class:`~email.message.Message` instances now have
162 private variables *_charset* and *_default_type*.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000163
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300164* Several methods in the :class:`~email.message.Message` class have been
165 deprecated, or their signatures changed. Also, many new methods have been
166 added. See the documentation for the :class:`~email.message.Message` class
167 for details. The changes should be completely backward compatible.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000168
169* The object structure has changed in the face of :mimetype:`message/rfc822`
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300170 content types. In :mod:`email` version 1, such a type would be represented
171 by a scalar payload, i.e. the container message's
172 :meth:`~email.message.Message.is_multipart` returned false,
173 :meth:`~email.message.Message.get_payload` was not a list object, but a
174 single :class:`~email.message.Message` instance.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000175
176 This structure was inconsistent with the rest of the package, so the object
177 representation for :mimetype:`message/rfc822` content types was changed. In
178 :mod:`email` version 2, the container *does* return ``True`` from
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300179 :meth:`~email.message.Message.is_multipart`, and
180 :meth:`~email.message.Message.get_payload` returns a list containing a single
181 :class:`~email.message.Message` item.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000182
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300183 Note that this is one place that backward compatibility could not be
184 completely maintained. However, if you're already testing the return type of
185 :meth:`~email.message.Message.get_payload`, you should be fine. You just need
186 to make sure your code doesn't do a :meth:`~email.message.Message.set_payload`
187 with a :class:`~email.message.Message` instance on a container with a content
188 type of :mimetype:`message/rfc822`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000189
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300190* The :class:`~email.parser.Parser` constructor's *strict* argument was added,
191 and its :meth:`~email.parser.Parser.parse` and
192 :meth:`~email.parser.Parser.parsestr` methods grew a *headersonly* argument.
193 The *strict* flag was also added to functions :func:`email.message_from_file`
194 and :func:`email.message_from_string`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000195
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300196* :meth:`Generator.__call__` is deprecated; use :meth:`Generator.flatten
197 <email.generator.Generator.flatten>` instead. The
198 :class:`~email.generator.Generator` class has also grown the
199 :meth:`~email.generator.Generator.clone` method.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000200
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300201* The :class:`~email.generator.DecodedGenerator` class in the
202 :mod:`email.generator` module was added.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000203
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300204* The intermediate base classes
205 :class:`~email.mime.nonmultipart.MIMENonMultipart` and
206 :class:`~email.mime.multipart.MIMEMultipart` have been added, and interposed
207 in the class hierarchy for most of the other MIME-related derived classes.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000208
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300209* The *_encoder* argument to the :class:`~email.mime.text.MIMEText` constructor
210 has been deprecated. Encoding now happens implicitly based on the
211 *_charset* argument.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000212
213* The following functions in the :mod:`email.Utils` module have been deprecated:
214 :func:`dump_address_pairs`, :func:`decode`, and :func:`encode`. The following
215 functions have been added to the module: :func:`make_msgid`,
216 :func:`decode_rfc2231`, :func:`encode_rfc2231`, and :func:`decode_params`.
217
218* The non-public function :func:`email.Iterators._structure` was added.
219
220
221Differences from :mod:`mimelib`
222-------------------------------
223
224The :mod:`email` package was originally prototyped as a separate library called
Georg Brandl0f5d6c02014-10-29 10:57:37 +0100225`mimelib <http://mimelib.sourceforge.net/>`_. Changes have been made so that method names
Georg Brandl8ec7f652007-08-15 14:28:01 +0000226are more consistent, and some methods or modules have either been added or
227removed. The semantics of some of the methods have also changed. For the most
228part, any functionality available in :mod:`mimelib` is still available in the
229:mod:`email` package, albeit often in a different way. Backward compatibility
230between the :mod:`mimelib` package and the :mod:`email` package was not a
231priority.
232
233Here is a brief description of the differences between the :mod:`mimelib` and
234the :mod:`email` packages, along with hints on how to port your applications.
235
236Of course, the most visible difference between the two packages is that the
237package name has been changed to :mod:`email`. In addition, the top-level
238package has the following differences:
239
240* :func:`messageFromString` has been renamed to :func:`message_from_string`.
241
242* :func:`messageFromFile` has been renamed to :func:`message_from_file`.
243
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300244The :class:`~email.message.Message` class has the following differences:
Georg Brandl8ec7f652007-08-15 14:28:01 +0000245
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300246* The method :meth:`asString` was renamed to
247 :meth:`~email.message.Message.as_string`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000248
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300249* The method :meth:`ismultipart` was renamed to
250 :meth:`~email.message.Message.is_multipart`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000251
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300252* The :meth:`~email.message.Message.get_payload` method has grown a *decode*
253 optional argument.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000254
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300255* The method :meth:`getall` was renamed to
256 :meth:`~email.message.Message.get_all`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000257
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300258* The method :meth:`addheader` was renamed to
259 :meth:`~email.message.Message.add_header`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000260
261* The method :meth:`gettype` was renamed to :meth:`get_type`.
262
263* The method :meth:`getmaintype` was renamed to :meth:`get_main_type`.
264
265* The method :meth:`getsubtype` was renamed to :meth:`get_subtype`.
266
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300267* The method :meth:`getparams` was renamed to
268 :meth:`~email.message.Message.get_params`. Also, whereas :meth:`getparams`
269 returned a list of strings, :meth:`~email.message.Message.get_params` returns
270 a list of 2-tuples, effectively the key/value pairs of the parameters, split
271 on the ``'='`` sign.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000272
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300273* The method :meth:`getparam` was renamed to
274 :meth:`~email.message.Message.get_param`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000275
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300276* The method :meth:`getcharsets` was renamed to
277 :meth:`~email.message.Message.get_charsets`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000278
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300279* The method :meth:`getfilename` was renamed to
280 :meth:`~email.message.Message.get_filename`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000281
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300282* The method :meth:`getboundary` was renamed to
283 :meth:`~email.message.Message.get_boundary`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000284
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300285* The method :meth:`setboundary` was renamed to
286 :meth:`~email.message.Message.set_boundary`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000287
288* The method :meth:`getdecodedpayload` was removed. To get similar
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300289 functionality, pass the value 1 to the *decode* flag of the
290 :meth:`~email.message.Message.get_payload` method.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000291
292* The method :meth:`getpayloadastext` was removed. Similar functionality is
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300293 supported by the :class:`~email.generator.DecodedGenerator` class in the
294 :mod:`email.generator` module.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000295
296* The method :meth:`getbodyastext` was removed. You can get similar
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300297 functionality by creating an iterator with
298 :func:`~email.iterators.typed_subpart_iterator` in the :mod:`email.iterators`
299 module.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000300
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300301The :class:`~email.parser.Parser` class has no differences in its public
302interface. It does have some additional smarts to recognize
303:mimetype:`message/delivery-status` type messages, which it represents as a
304:class:`~email.message.Message` instance containing separate
305:class:`~email.message.Message` subparts for each header block in the delivery
306status notification [#]_.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000307
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300308The :class:`~email.generator.Generator` class has no differences in its public
309interface. There is a new class in the :mod:`email.generator` module though,
310called :class:`~email.generator.DecodedGenerator` which provides most of the
311functionality previously available in the :meth:`Message.getpayloadastext`
312method.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000313
314The following modules and classes have been changed:
315
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300316* The :class:`~email.mime.base.MIMEBase` class constructor arguments *_major*
317 and *_minor* have changed to *_maintype* and *_subtype* respectively.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000318
319* The ``Image`` class/module has been renamed to ``MIMEImage``. The *_minor*
320 argument has been renamed to *_subtype*.
321
322* The ``Text`` class/module has been renamed to ``MIMEText``. The *_minor*
323 argument has been renamed to *_subtype*.
324
325* The ``MessageRFC822`` class/module has been renamed to ``MIMEMessage``. Note
326 that an earlier version of :mod:`mimelib` called this class/module ``RFC822``,
327 but that clashed with the Python standard library module :mod:`rfc822` on some
328 case-insensitive file systems.
329
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300330 Also, the :class:`~email.mime.message.MIMEMessage` class now represents any
331 kind of MIME message
Georg Brandl8ec7f652007-08-15 14:28:01 +0000332 with main type :mimetype:`message`. It takes an optional argument *_subtype*
333 which is used to set the MIME subtype. *_subtype* defaults to
334 :mimetype:`rfc822`.
335
336:mod:`mimelib` provided some utility functions in its :mod:`address` and
337:mod:`date` modules. All of these functions have been moved to the
338:mod:`email.utils` module.
339
340The ``MsgReader`` class/module has been removed. Its functionality is most
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300341closely supported in the :func:`~email.iterators.body_line_iterator` function
342in the :mod:`email.iterators` module.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000343
344.. rubric:: Footnotes
345
346.. [#] Delivery Status Notifications (DSN) are defined in :rfc:`1894`.