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