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