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