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 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 115 :class:`~email.mime.application.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 <email.message.Message.get_param>` 123 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:`~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 135 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 141 :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`. 144 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* 148 argument to the :class:`~email.parser.Parser` class. These are expected to 149 be removed in future versions. 150 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 157* 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*. 163 164* 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. 168 169* The object structure has changed in the face of :mimetype:`message/rfc822` 170 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. 175 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 179 :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. 182 183 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`. 189 190* 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`. 195 196* :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. 200 201* The :class:`~email.generator.DecodedGenerator` class in the 202 :mod:`email.generator` module was added. 203 204* 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. 208 209* 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. 212 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 225`mimelib <http://mimelib.sourceforge.net/>`_. Changes have been made so that method names 226are 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 244The :class:`~email.message.Message` class has the following differences: 245 246* The method :meth:`asString` was renamed to 247 :meth:`~email.message.Message.as_string`. 248 249* The method :meth:`ismultipart` was renamed to 250 :meth:`~email.message.Message.is_multipart`. 251 252* The :meth:`~email.message.Message.get_payload` method has grown a *decode* 253 optional argument. 254 255* The method :meth:`getall` was renamed to 256 :meth:`~email.message.Message.get_all`. 257 258* The method :meth:`addheader` was renamed to 259 :meth:`~email.message.Message.add_header`. 260 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 267* 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. 272 273* The method :meth:`getparam` was renamed to 274 :meth:`~email.message.Message.get_param`. 275 276* The method :meth:`getcharsets` was renamed to 277 :meth:`~email.message.Message.get_charsets`. 278 279* The method :meth:`getfilename` was renamed to 280 :meth:`~email.message.Message.get_filename`. 281 282* The method :meth:`getboundary` was renamed to 283 :meth:`~email.message.Message.get_boundary`. 284 285* The method :meth:`setboundary` was renamed to 286 :meth:`~email.message.Message.set_boundary`. 287 288* The method :meth:`getdecodedpayload` was removed. To get similar 289 functionality, pass the value 1 to the *decode* flag of the 290 :meth:`~email.message.Message.get_payload` method. 291 292* The method :meth:`getpayloadastext` was removed. Similar functionality is 293 supported by the :class:`~email.generator.DecodedGenerator` class in the 294 :mod:`email.generator` module. 295 296* The method :meth:`getbodyastext` was removed. You can get similar 297 functionality by creating an iterator with 298 :func:`~email.iterators.typed_subpart_iterator` in the :mod:`email.iterators` 299 module. 300 301The :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 [#]_. 307 308The :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. 313 314The following modules and classes have been changed: 315 316* The :class:`~email.mime.base.MIMEBase` class constructor arguments *_major* 317 and *_minor* have changed to *_maintype* and *_subtype* respectively. 318 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 330 Also, the :class:`~email.mime.message.MIMEMessage` class now represents any 331 kind of MIME message 332 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 341closely supported in the :func:`~email.iterators.body_line_iterator` function 342in the :mod:`email.iterators` module. 343 344.. rubric:: Footnotes 345 346.. [#] Delivery Status Notifications (DSN) are defined in :rfc:`1894`. 347