| 
									
										
										
										
											2012-05-27 17:10:36 -04:00
										 |  |  | :mod:`email.message`: Representing an email message
 | 
					
						
							|  |  |  | ---------------------------------------------------
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. module:: email.message
 | 
					
						
							|  |  |  |    :synopsis: The base class representing email messages.
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | .. moduleauthor:: R. David Murray <rdmurray@bitdance.com>
 | 
					
						
							|  |  |  | .. sectionauthor:: R. David Murray <rdmurray@bitdance.com>,
 | 
					
						
							|  |  |  |                    Barry A. Warsaw <barry@python.org>
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-11 15:02:54 -04:00
										 |  |  | **Source code:** :source:`Lib/email/message.py`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --------------
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-08 18:28:43 -04:00
										 |  |  | .. versionadded:: 3.6 [1]_
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | The central class in the :mod:`email` package is the :class:`EmailMessage`
 | 
					
						
							|  |  |  | class, imported from the :mod:`email.message` module.  It is the base class for
 | 
					
						
							|  |  |  | the :mod:`email` object model.  :class:`EmailMessage` provides the core
 | 
					
						
							|  |  |  | functionality for setting and querying header fields, for accessing message
 | 
					
						
							|  |  |  | bodies, and for creating or modifying structured messages.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | An email message consists of *headers* and a *payload* (which is also referred
 | 
					
						
							|  |  |  | to as the *content*).  Headers are :rfc:`5322` or :rfc:`6532` style field names
 | 
					
						
							|  |  |  | and values, where the field name and value are separated by a colon.  The colon
 | 
					
						
							|  |  |  | is not part of either the field name or the field value.  The payload may be a
 | 
					
						
							|  |  |  | simple text message, or a binary object, or a structured sequence of
 | 
					
						
							|  |  |  | sub-messages each with their own set of headers and their own payload.  The
 | 
					
						
							|  |  |  | latter type of payload is indicated by the message having a MIME type such as
 | 
					
						
							|  |  |  | :mimetype:`multipart/\*` or :mimetype:`message/rfc822`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The conceptual model provided by an :class:`EmailMessage` object is that of an
 | 
					
						
							|  |  |  | ordered dictionary of headers coupled with a *payload* that represents the
 | 
					
						
							|  |  |  | :rfc:`5322` body of the message, which might be a list of sub-``EmailMessage``
 | 
					
						
							|  |  |  | objects.  In addition to the normal dictionary methods for accessing the header
 | 
					
						
							|  |  |  | names and values, there are methods for accessing specialized information from
 | 
					
						
							|  |  |  | the headers (for example the MIME content type), for operating on the payload,
 | 
					
						
							|  |  |  | for generating a serialized version of the message, and for recursively walking
 | 
					
						
							|  |  |  | over the object tree.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The :class:`EmailMessage` dictionary-like interface is indexed by the header
 | 
					
						
							|  |  |  | names, which must be ASCII values.  The values of the dictionary are strings
 | 
					
						
							|  |  |  | with some extra methods.  Headers are stored and returned in case-preserving
 | 
					
						
							|  |  |  | form, but field names are matched case-insensitively.  Unlike a real dict,
 | 
					
						
							|  |  |  | there is an ordering to the keys, and there can be duplicate keys.  Additional
 | 
					
						
							|  |  |  | methods are provided for working with headers that have duplicate keys.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The *payload* is either a string or bytes object, in the case of simple message
 | 
					
						
							|  |  |  | objects, or a list of :class:`EmailMessage` objects, for MIME container
 | 
					
						
							|  |  |  | documents such as :mimetype:`multipart/\*` and :mimetype:`message/rfc822`
 | 
					
						
							|  |  |  | message objects.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. class:: EmailMessage(policy=default)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-19 14:37:57 -06:00
										 |  |  |    If *policy* is specified use the rules it specifies to update and serialize
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |    the representation of the message.  If *policy* is not set, use the
 | 
					
						
							|  |  |  |    :class:`~email.policy.default` policy, which follows the rules of the email
 | 
					
						
							|  |  |  |    RFCs except for line endings (instead of the RFC mandated ``\r\n``, it uses
 | 
					
						
							|  |  |  |    the Python standard ``\n`` line endings).  For more information see the
 | 
					
						
							| 
									
										
										
										
											2013-08-09 16:15:28 -04:00
										 |  |  |    :mod:`~email.policy` documentation.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |    .. method:: as_string(unixfrom=False, maxheaderlen=None, policy=None)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       Return the entire message flattened as a string.  When optional
 | 
					
						
							|  |  |  |       *unixfrom* is true, the envelope header is included in the returned
 | 
					
						
							| 
									
										
										
										
											2017-05-19 14:37:57 -06:00
										 |  |  |       string.  *unixfrom* defaults to ``False``.  For backward compatibility
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       with the base :class:`~email.message.Message` class *maxheaderlen* is
 | 
					
						
							|  |  |  |       accepted, but defaults to ``None``, which means that by default the line
 | 
					
						
							|  |  |  |       length is controlled by the
 | 
					
						
							|  |  |  |       :attr:`~email.policy.EmailPolicy.max_line_length` of the policy.  The
 | 
					
						
							|  |  |  |       *policy* argument may be used to override the default policy obtained
 | 
					
						
							|  |  |  |       from the message instance.  This can be used to control some of the
 | 
					
						
							|  |  |  |       formatting produced by the method, since the specified *policy* will be
 | 
					
						
							|  |  |  |       passed to the :class:`~email.generator.Generator`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Flattening the message may trigger changes to the :class:`EmailMessage`
 | 
					
						
							|  |  |  |       if defaults need to be filled in to complete the transformation to a
 | 
					
						
							|  |  |  |       string (for example, MIME boundaries may be generated or modified).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Note that this method is provided as a convenience and may not be the
 | 
					
						
							|  |  |  |       most useful way to serialize messages in your application, especially if
 | 
					
						
							|  |  |  |       you are dealing with multiple messages.  See
 | 
					
						
							|  |  |  |       :class:`email.generator.Generator` for a more flexible API for
 | 
					
						
							|  |  |  |       serializing messages.  Note also that this method is restricted to
 | 
					
						
							|  |  |  |       producing messages serialized as "7 bit clean" when
 | 
					
						
							|  |  |  |       :attr:`~email.policy.EmailPolicy.utf8` is ``False``, which is the default.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. versionchanged:: 3.6 the default behavior when *maxheaderlen*
 | 
					
						
							|  |  |  |          is not specified was changed from defaulting to 0 to defaulting
 | 
					
						
							|  |  |  |          to the value of *max_line_length* from the policy.
 | 
					
						
							| 
									
										
										
										
											2013-08-09 16:15:28 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: __str__()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-05 16:45:30 -03:00
										 |  |  |       Equivalent to ``as_string(policy=self.policy.clone(utf8=True))``.  Allows
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       ``str(msg)`` to produce a string containing the serialized message in a
 | 
					
						
							|  |  |  |       readable format.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. versionchanged:: 3.4 the method was changed to use ``utf8=True``,
 | 
					
						
							|  |  |  |          thus producing an :rfc:`6531`-like message representation, instead of
 | 
					
						
							|  |  |  |          being a direct alias for :meth:`as_string`.
 | 
					
						
							| 
									
										
										
										
											2013-08-09 16:15:28 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: as_bytes(unixfrom=False, policy=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Return the entire message flattened as a bytes object.  When optional
 | 
					
						
							|  |  |  |       *unixfrom* is true, the envelope header is included in the returned
 | 
					
						
							|  |  |  |       string.  *unixfrom* defaults to ``False``.  The *policy* argument may be
 | 
					
						
							|  |  |  |       used to override the default policy obtained from the message instance.
 | 
					
						
							|  |  |  |       This can be used to control some of the formatting produced by the
 | 
					
						
							|  |  |  |       method, since the specified *policy* will be passed to the
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       :class:`~email.generator.BytesGenerator`.
 | 
					
						
							| 
									
										
										
										
											2013-08-09 16:15:28 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       Flattening the message may trigger changes to the :class:`EmailMessage`
 | 
					
						
							|  |  |  |       if defaults need to be filled in to complete the transformation to a
 | 
					
						
							|  |  |  |       string (for example, MIME boundaries may be generated or modified).
 | 
					
						
							| 
									
										
										
										
											2013-08-09 16:15:28 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       Note that this method is provided as a convenience and may not be the
 | 
					
						
							|  |  |  |       most useful way to serialize messages in your application, especially if
 | 
					
						
							|  |  |  |       you are dealing with multiple messages.  See
 | 
					
						
							|  |  |  |       :class:`email.generator.BytesGenerator` for a more flexible API for
 | 
					
						
							|  |  |  |       serializing messages.
 | 
					
						
							| 
									
										
										
										
											2013-08-09 16:15:28 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: __bytes__()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Equivalent to :meth:`.as_bytes()`.  Allows ``bytes(msg)`` to produce a
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       bytes object containing the serialized message.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: is_multipart()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-31 02:26:06 +02:00
										 |  |  |       Return ``True`` if the message's payload is a list of
 | 
					
						
							|  |  |  |       sub-\ :class:`EmailMessage` objects, otherwise return ``False``.  When
 | 
					
						
							| 
									
										
										
										
											2014-09-27 15:37:40 -04:00
										 |  |  |       :meth:`is_multipart` returns ``False``, the payload should be a string
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       object (which might be a CTE encoded binary payload).  Note that
 | 
					
						
							|  |  |  |       :meth:`is_multipart` returning ``True`` does not necessarily mean that
 | 
					
						
							|  |  |  |       "msg.get_content_maintype() == 'multipart'" will return the ``True``.
 | 
					
						
							|  |  |  |       For example, ``is_multipart`` will return ``True`` when the
 | 
					
						
							|  |  |  |       :class:`EmailMessage` is of type ``message/rfc822``.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: set_unixfrom(unixfrom)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       Set the message's envelope header to *unixfrom*, which should be a
 | 
					
						
							|  |  |  |       string.  (See :class:`~mailbox.mboxMessage` for a brief description of
 | 
					
						
							|  |  |  |       this header.)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: get_unixfrom()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return the message's envelope header.  Defaults to ``None`` if the
 | 
					
						
							|  |  |  |       envelope header was never set.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |    The following methods implement the mapping-like interface for accessing the
 | 
					
						
							|  |  |  |    message's headers.  Note that there are some semantic differences
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    between these methods and a normal mapping (i.e. dictionary) interface.  For
 | 
					
						
							|  |  |  |    example, in a dictionary there are no duplicate keys, but here there may be
 | 
					
						
							|  |  |  |    duplicate message headers.  Also, in dictionaries there is no guaranteed
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |    order to the keys returned by :meth:`keys`, but in an :class:`EmailMessage`
 | 
					
						
							|  |  |  |    object, headers are always returned in the order they appeared in the
 | 
					
						
							|  |  |  |    original message, or in which they were added to the message later.  Any
 | 
					
						
							|  |  |  |    header deleted and then re-added is always appended to the end of the
 | 
					
						
							|  |  |  |    header list.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |    These semantic differences are intentional and are biased toward
 | 
					
						
							|  |  |  |    convenience in the most common use cases.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    Note that in all cases, any envelope header present in the message is not
 | 
					
						
							|  |  |  |    included in the mapping interface.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: __len__()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return the total number of headers, including duplicates.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: __contains__(name)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-12 16:57:03 +02:00
										 |  |  |       Return ``True`` if the message object has a field named *name*. Matching is
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       done without regard to case and *name* does not include the trailing
 | 
					
						
							|  |  |  |       colon.  Used for the ``in`` operator.  For example::
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |            if 'message-id' in myMessage:
 | 
					
						
							|  |  |  |               print('Message-ID:', myMessage['message-id'])
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: __getitem__(name)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       Return the value of the named header field.  *name* does not include the
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       colon field separator.  If the header is missing, ``None`` is returned; a
 | 
					
						
							|  |  |  |       :exc:`KeyError` is never raised.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Note that if the named field appears more than once in the message's
 | 
					
						
							|  |  |  |       headers, exactly which of those field values will be returned is
 | 
					
						
							|  |  |  |       undefined.  Use the :meth:`get_all` method to get the values of all the
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       extant headers named *name*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Using the standard (non-``compat32``) policies, the returned value is an
 | 
					
						
							|  |  |  |       instance of a subclass of :class:`email.headerregistry.BaseHeader`.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: __setitem__(name, val)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Add a header to the message with field name *name* and value *val*.  The
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       field is appended to the end of the message's existing headers.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Note that this does *not* overwrite or delete any existing header with the same
 | 
					
						
							|  |  |  |       name.  If you want to ensure that the new header is the only one present in the
 | 
					
						
							|  |  |  |       message with field name *name*, delete the field first, e.g.::
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |          del msg['subject']
 | 
					
						
							|  |  |  |          msg['subject'] = 'Python roolz!'
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-19 14:37:57 -06:00
										 |  |  |       If the :mod:`policy` defines certain headers to be unique (as the standard
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       policies do), this method may raise a :exc:`ValueError` when an attempt
 | 
					
						
							|  |  |  |       is made to assign a value to such a header when one already exists.  This
 | 
					
						
							|  |  |  |       behavior is intentional for consistency's sake, but do not depend on it
 | 
					
						
							|  |  |  |       as we may choose to make such assignments do an automatic deletion of the
 | 
					
						
							|  |  |  |       existing header in the future.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: __delitem__(name)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Delete all occurrences of the field with name *name* from the message's
 | 
					
						
							| 
									
										
										
										
											2009-05-17 11:28:33 +00:00
										 |  |  |       headers.  No exception is raised if the named field isn't present in the
 | 
					
						
							|  |  |  |       headers.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: keys()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return a list of all the message's header field names.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: values()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return a list of all the message's field values.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: items()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return a list of 2-tuples containing all the message's field headers and
 | 
					
						
							|  |  |  |       values.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-17 11:28:33 +00:00
										 |  |  |    .. method:: get(name, failobj=None)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return the value of the named header field.  This is identical to
 | 
					
						
							|  |  |  |       :meth:`__getitem__` except that optional *failobj* is returned if the
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       named header is missing (*failobj* defaults to ``None``).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |    Here are some additional useful header related methods:
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-17 11:28:33 +00:00
										 |  |  |    .. method:: get_all(name, failobj=None)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return a list of all the values for the field named *name*. If there are
 | 
					
						
							|  |  |  |       no such named headers in the message, *failobj* is returned (defaults to
 | 
					
						
							|  |  |  |       ``None``).
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: add_header(_name, _value, **_params)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Extended header setting.  This method is similar to :meth:`__setitem__`
 | 
					
						
							|  |  |  |       except that additional header parameters can be provided as keyword
 | 
					
						
							|  |  |  |       arguments.  *_name* is the header field to add and *_value* is the
 | 
					
						
							|  |  |  |       *primary* value for the header.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       For each item in the keyword argument dictionary *_params*, the key is
 | 
					
						
							|  |  |  |       taken as the parameter name, with underscores converted to dashes (since
 | 
					
						
							|  |  |  |       dashes are illegal in Python identifiers).  Normally, the parameter will
 | 
					
						
							|  |  |  |       be added as ``key="value"`` unless the value is ``None``, in which case
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       only the key will be added.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If the value contains non-ASCII characters, the charset and language may
 | 
					
						
							| 
									
										
										
										
											2016-11-20 08:37:21 +00:00
										 |  |  |       be explicitly controlled by specifying the value as a three tuple in the
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       format ``(CHARSET, LANGUAGE, VALUE)``, where ``CHARSET`` is a string
 | 
					
						
							|  |  |  |       naming the charset to be used to encode the value, ``LANGUAGE`` can
 | 
					
						
							|  |  |  |       usually be set to ``None`` or the empty string (see :rfc:`2231` for other
 | 
					
						
							|  |  |  |       possibilities), and ``VALUE`` is the string value containing non-ASCII
 | 
					
						
							|  |  |  |       code points.  If a three tuple is not passed and the value contains
 | 
					
						
							|  |  |  |       non-ASCII characters, it is automatically encoded in :rfc:`2231` format
 | 
					
						
							|  |  |  |       using a ``CHARSET`` of ``utf-8`` and a ``LANGUAGE`` of ``None``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Here is an example::
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |          msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       This will add a header that looks like ::
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |          Content-Disposition: attachment; filename="bud.gif"
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       An example of the extended interface with non-ASCII characters::
 | 
					
						
							| 
									
										
										
										
											2010-12-13 23:51:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |          msg.add_header('Content-Disposition', 'attachment',
 | 
					
						
							|  |  |  |                         filename=('iso-8859-1', '', 'Fußballer.ppt'))
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: replace_header(_name, _value)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Replace a header.  Replace the first header found in the message that
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       matches *_name*, retaining header order and field name case of the
 | 
					
						
							|  |  |  |       original header.  If no matching header is found, raise a
 | 
					
						
							|  |  |  |       :exc:`KeyError`.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: get_content_type()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       Return the message's content type, coerced to lower case of the form
 | 
					
						
							|  |  |  |       :mimetype:`maintype/subtype`.  If there is no :mailheader:`Content-Type`
 | 
					
						
							|  |  |  |       header in the message return the value returned by
 | 
					
						
							|  |  |  |       :meth:`get_default_type`.  If the :mailheader:`Content-Type` header is
 | 
					
						
							|  |  |  |       invalid, return ``text/plain``.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       (According to :rfc:`2045`, messages always have a default type,
 | 
					
						
							|  |  |  |       :meth:`get_content_type` will always return a value.  :rfc:`2045` defines
 | 
					
						
							|  |  |  |       a message's default type to be :mimetype:`text/plain` unless it appears
 | 
					
						
							|  |  |  |       inside a :mimetype:`multipart/digest` container, in which case it would
 | 
					
						
							|  |  |  |       be :mimetype:`message/rfc822`.  If the :mailheader:`Content-Type` header
 | 
					
						
							|  |  |  |       has an invalid type specification, :rfc:`2045` mandates that the default
 | 
					
						
							|  |  |  |       type be :mimetype:`text/plain`.)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: get_content_maintype()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return the message's main content type.  This is the :mimetype:`maintype`
 | 
					
						
							|  |  |  |       part of the string returned by :meth:`get_content_type`.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: get_content_subtype()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return the message's sub-content type.  This is the :mimetype:`subtype`
 | 
					
						
							|  |  |  |       part of the string returned by :meth:`get_content_type`.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: get_default_type()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return the default content type.  Most messages have a default content
 | 
					
						
							|  |  |  |       type of :mimetype:`text/plain`, except for messages that are subparts of
 | 
					
						
							|  |  |  |       :mimetype:`multipart/digest` containers.  Such subparts have a default
 | 
					
						
							|  |  |  |       content type of :mimetype:`message/rfc822`.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: set_default_type(ctype)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Set the default content type.  *ctype* should either be
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       :mimetype:`text/plain` or :mimetype:`message/rfc822`, although this is
 | 
					
						
							|  |  |  |       not enforced.  The default content type is not stored in the
 | 
					
						
							|  |  |  |       :mailheader:`Content-Type` header, so it only affects the return value of
 | 
					
						
							|  |  |  |       the ``get_content_type`` methods when no :mailheader:`Content-Type`
 | 
					
						
							|  |  |  |       header is present in the message.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-15 21:13:56 -07:00
										 |  |  |    .. method:: set_param(param, value, header='Content-Type', requote=True, \
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  |                          charset=None, language='', replace=False)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Set a parameter in the :mailheader:`Content-Type` header.  If the
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       parameter already exists in the header, replace its value with *value*.
 | 
					
						
							|  |  |  |       When *header* is ``Content-Type`` (the default) and the header does not
 | 
					
						
							|  |  |  |       yet exist in the message, add it, set its value to
 | 
					
						
							|  |  |  |       :mimetype:`text/plain`, and append the new parameter value.  Optional
 | 
					
						
							|  |  |  |       *header* specifies an alternative header to :mailheader:`Content-Type`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If the value contains non-ASCII characters, the charset and language may
 | 
					
						
							| 
									
										
										
										
											2017-02-28 22:26:56 -05:00
										 |  |  |       be explicitly specified using the optional *charset* and *language*
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       parameters.  Optional *language* specifies the :rfc:`2231` language,
 | 
					
						
							|  |  |  |       defaulting to the empty string.  Both *charset* and *language* should be
 | 
					
						
							|  |  |  |       strings.  The default is to use the ``utf8`` *charset* and ``None`` for
 | 
					
						
							|  |  |  |       the *language*.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  |       If *replace* is ``False`` (the default) the header is moved to the
 | 
					
						
							|  |  |  |       end of the list of headers.  If *replace* is ``True``, the header
 | 
					
						
							|  |  |  |       will be updated in place.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       Use of the *requote* parameter with :class:`EmailMessage` objects is
 | 
					
						
							|  |  |  |       deprecated.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Note that existing parameter values of headers may be accessed through
 | 
					
						
							|  |  |  |       the :attr:`~email.headerregistry.BaseHeader.params` attribute of the
 | 
					
						
							| 
									
										
										
										
											2018-12-05 16:45:30 -03:00
										 |  |  |       header value (for example, ``msg['Content-Type'].params['charset']``).
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-15 21:13:56 -07:00
										 |  |  |       .. versionchanged:: 3.4 ``replace`` keyword was added.
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-17 11:28:33 +00:00
										 |  |  |    .. method:: del_param(param, header='content-type', requote=True)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Remove the given parameter completely from the :mailheader:`Content-Type`
 | 
					
						
							|  |  |  |       header.  The header will be re-written in place without the parameter or
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       its value.  Optional *header* specifies an alternative to
 | 
					
						
							|  |  |  |       :mailheader:`Content-Type`.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       Use of the *requote* parameter with :class:`EmailMessage` objects is
 | 
					
						
							|  |  |  |       deprecated.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-17 11:28:33 +00:00
										 |  |  |    .. method:: get_filename(failobj=None)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return the value of the ``filename`` parameter of the
 | 
					
						
							|  |  |  |       :mailheader:`Content-Disposition` header of the message.  If the header
 | 
					
						
							|  |  |  |       does not have a ``filename`` parameter, this method falls back to looking
 | 
					
						
							| 
									
										
										
										
											2010-03-04 17:38:18 +00:00
										 |  |  |       for the ``name`` parameter on the :mailheader:`Content-Type` header.  If
 | 
					
						
							|  |  |  |       neither is found, or the header is missing, then *failobj* is returned.
 | 
					
						
							|  |  |  |       The returned string will always be unquoted as per
 | 
					
						
							|  |  |  |       :func:`email.utils.unquote`.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-17 11:28:33 +00:00
										 |  |  |    .. method:: get_boundary(failobj=None)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return the value of the ``boundary`` parameter of the
 | 
					
						
							|  |  |  |       :mailheader:`Content-Type` header of the message, or *failobj* if either
 | 
					
						
							|  |  |  |       the header is missing, or has no ``boundary`` parameter.  The returned
 | 
					
						
							| 
									
										
										
										
											2009-04-27 16:45:26 +00:00
										 |  |  |       string will always be unquoted as per :func:`email.utils.unquote`.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: set_boundary(boundary)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Set the ``boundary`` parameter of the :mailheader:`Content-Type` header to
 | 
					
						
							|  |  |  |       *boundary*.  :meth:`set_boundary` will always quote *boundary* if
 | 
					
						
							| 
									
										
										
										
											2013-08-19 09:59:18 +03:00
										 |  |  |       necessary.  A :exc:`~email.errors.HeaderParseError` is raised if the
 | 
					
						
							|  |  |  |       message object has no :mailheader:`Content-Type` header.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       Note that using this method is subtly different from deleting the old
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       :mailheader:`Content-Type` header and adding a new one with the new
 | 
					
						
							|  |  |  |       boundary via :meth:`add_header`, because :meth:`set_boundary` preserves
 | 
					
						
							|  |  |  |       the order of the :mailheader:`Content-Type` header in the list of
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       headers.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-17 11:28:33 +00:00
										 |  |  |    .. method:: get_content_charset(failobj=None)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return the ``charset`` parameter of the :mailheader:`Content-Type` header,
 | 
					
						
							|  |  |  |       coerced to lower case.  If there is no :mailheader:`Content-Type` header, or if
 | 
					
						
							|  |  |  |       that header has no ``charset`` parameter, *failobj* is returned.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-17 11:28:33 +00:00
										 |  |  |    .. method:: get_charsets(failobj=None)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Return a list containing the character set names in the message.  If the
 | 
					
						
							|  |  |  |       message is a :mimetype:`multipart`, then the list will contain one element
 | 
					
						
							|  |  |  |       for each subpart in the payload, otherwise, it will be a list of length 1.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Each item in the list will be a string which is the value of the
 | 
					
						
							|  |  |  |       ``charset`` parameter in the :mailheader:`Content-Type` header for the
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       represented subpart.  If the subpart has no :mailheader:`Content-Type`
 | 
					
						
							|  |  |  |       header, no ``charset`` parameter, or is not of the :mimetype:`text` main
 | 
					
						
							|  |  |  |       MIME type, then that item in the returned list will be *failobj*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: is_attachment
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Return ``True`` if there is a :mailheader:`Content-Disposition` header
 | 
					
						
							|  |  |  |       and its (case insensitive) value is ``attachment``, ``False`` otherwise.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. versionchanged:: 3.4.2
 | 
					
						
							|  |  |  |          is_attachment is now a method instead of a property, for consistency
 | 
					
						
							|  |  |  |          with :meth:`~email.message.Message.is_multipart`.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-16 15:41:07 -04:00
										 |  |  |    .. method:: get_content_disposition()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Return the lowercased value (without parameters) of the message's
 | 
					
						
							|  |  |  |       :mailheader:`Content-Disposition` header if it has one, or ``None``.  The
 | 
					
						
							|  |  |  |       possible values for this method are *inline*, *attachment* or ``None``
 | 
					
						
							|  |  |  |       if the message follows :rfc:`2183`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. versionadded:: 3.5
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    The following methods relate to interrogating and manipulating the content
 | 
					
						
							|  |  |  |    (payload) of the message.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: walk()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       The :meth:`walk` method is an all-purpose generator which can be used to
 | 
					
						
							|  |  |  |       iterate over all the parts and subparts of a message object tree, in
 | 
					
						
							|  |  |  |       depth-first traversal order.  You will typically use :meth:`walk` as the
 | 
					
						
							|  |  |  |       iterator in a ``for`` loop; each iteration returns the next subpart.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Here's an example that prints the MIME type of every part of a multipart
 | 
					
						
							| 
									
										
										
										
											2013-07-29 15:49:58 -04:00
										 |  |  |       message structure:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-27 15:37:40 -04:00
										 |  |  |       .. testsetup::
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-10 00:39:41 -05:00
										 |  |  |          from email import message_from_binary_file
 | 
					
						
							|  |  |  |          with open('../Lib/test/test_email/data/msg_16.txt', 'rb') as f:
 | 
					
						
							|  |  |  |              msg = message_from_binary_file(f)
 | 
					
						
							| 
									
										
										
										
											2014-09-27 15:37:40 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       .. doctest::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |          >>> for part in msg.walk():
 | 
					
						
							|  |  |  |          ...     print(part.get_content_type())
 | 
					
						
							|  |  |  |          multipart/report
 | 
					
						
							|  |  |  |          text/plain
 | 
					
						
							|  |  |  |          message/delivery-status
 | 
					
						
							|  |  |  |          text/plain
 | 
					
						
							|  |  |  |          text/plain
 | 
					
						
							|  |  |  |          message/rfc822
 | 
					
						
							|  |  |  |          text/plain
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       ``walk`` iterates over the subparts of any part where
 | 
					
						
							|  |  |  |       :meth:`is_multipart` returns ``True``, even though
 | 
					
						
							|  |  |  |       ``msg.get_content_maintype() == 'multipart'`` may return ``False``.  We
 | 
					
						
							|  |  |  |       can see this in our example by making use of the ``_structure`` debug
 | 
					
						
							|  |  |  |       helper function:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. doctest::
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-09 23:52:10 +01:00
										 |  |  |          >>> from email.iterators import _structure
 | 
					
						
							| 
									
										
										
										
											2014-09-27 15:37:40 -04:00
										 |  |  |          >>> for part in msg.walk():
 | 
					
						
							| 
									
										
										
										
											2016-08-10 00:39:41 -05:00
										 |  |  |          ...     print(part.get_content_maintype() == 'multipart',
 | 
					
						
							| 
									
										
										
										
											2014-09-27 15:37:40 -04:00
										 |  |  |          ...           part.is_multipart())
 | 
					
						
							|  |  |  |          True True
 | 
					
						
							|  |  |  |          False False
 | 
					
						
							|  |  |  |          False True
 | 
					
						
							|  |  |  |          False False
 | 
					
						
							|  |  |  |          False False
 | 
					
						
							|  |  |  |          False True
 | 
					
						
							|  |  |  |          False False
 | 
					
						
							|  |  |  |          >>> _structure(msg)
 | 
					
						
							|  |  |  |          multipart/report
 | 
					
						
							|  |  |  |              text/plain
 | 
					
						
							| 
									
										
										
										
											2016-08-10 00:39:41 -05:00
										 |  |  |              message/delivery-status
 | 
					
						
							|  |  |  |                  text/plain
 | 
					
						
							|  |  |  |                  text/plain
 | 
					
						
							|  |  |  |              message/rfc822
 | 
					
						
							|  |  |  |                  text/plain
 | 
					
						
							| 
									
										
										
										
											2014-09-27 15:37:40 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       Here the ``message`` parts are not ``multiparts``, but they do contain
 | 
					
						
							|  |  |  |       subparts. ``is_multipart()`` returns ``True`` and ``walk`` descends
 | 
					
						
							|  |  |  |       into the subparts.
 | 
					
						
							| 
									
										
										
										
											2013-07-29 15:49:58 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |    .. method:: get_body(preferencelist=('related', 'html', 'plain'))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Return the MIME part that is the best candidate to be the "body" of the
 | 
					
						
							|  |  |  |       message.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       *preferencelist* must be a sequence of strings from the set ``related``,
 | 
					
						
							|  |  |  |       ``html``, and ``plain``, and indicates the order of preference for the
 | 
					
						
							|  |  |  |       content type of the part returned.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Start looking for candidate matches with the object on which the
 | 
					
						
							|  |  |  |       ``get_body`` method is called.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If ``related`` is not included in *preferencelist*, consider the root
 | 
					
						
							|  |  |  |       part (or subpart of the root part) of any related encountered as a
 | 
					
						
							|  |  |  |       candidate if the (sub-)part matches a preference.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       When encountering a ``multipart/related``, check the ``start`` parameter
 | 
					
						
							|  |  |  |       and if a part with a matching :mailheader:`Content-ID` is found, consider
 | 
					
						
							|  |  |  |       only it when looking for candidate matches.  Otherwise consider only the
 | 
					
						
							|  |  |  |       first (default root) part of the ``multipart/related``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If a part has a :mailheader:`Content-Disposition` header, only consider
 | 
					
						
							|  |  |  |       the part a candidate match if the value of the header is ``inline``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If none of the candidates matches any of the preferences in
 | 
					
						
							| 
									
										
										
										
											2017-05-19 14:37:57 -06:00
										 |  |  |       *preferencelist*, return ``None``.
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       Notes: (1) For most applications the only *preferencelist* combinations
 | 
					
						
							|  |  |  |       that really make sense are ``('plain',)``, ``('html', 'plain')``, and the
 | 
					
						
							|  |  |  |       default ``('related', 'html', 'plain')``.  (2) Because matching starts
 | 
					
						
							|  |  |  |       with the object on which ``get_body`` is called, calling ``get_body`` on
 | 
					
						
							|  |  |  |       a ``multipart/related`` will return the object itself unless
 | 
					
						
							|  |  |  |       *preferencelist* has a non-default value. (3) Messages (or message parts)
 | 
					
						
							|  |  |  |       that do not specify a :mailheader:`Content-Type` or whose
 | 
					
						
							|  |  |  |       :mailheader:`Content-Type` header is invalid will be treated as if they
 | 
					
						
							|  |  |  |       are of type ``text/plain``, which may occasionally cause ``get_body`` to
 | 
					
						
							|  |  |  |       return unexpected results.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: iter_attachments()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Return an iterator over all of the immediate sub-parts of the message
 | 
					
						
							|  |  |  |       that are not candidate "body" parts.  That is, skip the first occurrence
 | 
					
						
							|  |  |  |       of each of ``text/plain``, ``text/html``, ``multipart/related``, or
 | 
					
						
							|  |  |  |       ``multipart/alternative`` (unless they are explicitly marked as
 | 
					
						
							|  |  |  |       attachments via :mailheader:`Content-Disposition: attachment`), and
 | 
					
						
							|  |  |  |       return all remaining parts.  When applied directly to a
 | 
					
						
							|  |  |  |       ``multipart/related``, return an iterator over the all the related parts
 | 
					
						
							|  |  |  |       except the root part (ie: the part pointed to by the ``start`` parameter,
 | 
					
						
							|  |  |  |       or the first part if there is no ``start`` parameter or the ``start``
 | 
					
						
							|  |  |  |       parameter doesn't match the :mailheader:`Content-ID` of any of the
 | 
					
						
							|  |  |  |       parts).  When applied directly to a ``multipart/alternative`` or a
 | 
					
						
							|  |  |  |       non-``multipart``, return an empty iterator.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: iter_parts()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Return an iterator over all of the immediate sub-parts of the message,
 | 
					
						
							|  |  |  |       which will be empty for a non-``multipart``.  (See also
 | 
					
						
							|  |  |  |       :meth:`~email.message.EmailMessage.walk`.)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: get_content(*args, content_manager=None, **kw)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Call the :meth:`~email.contentmanager.ContentManager.get_content` method
 | 
					
						
							|  |  |  |       of the *content_manager*, passing self as the message object, and passing
 | 
					
						
							|  |  |  |       along any other arguments or keywords as additional arguments.  If
 | 
					
						
							|  |  |  |       *content_manager* is not specified, use the ``content_manager`` specified
 | 
					
						
							|  |  |  |       by the current :mod:`~email.policy`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: set_content(*args, content_manager=None, **kw)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Call the :meth:`~email.contentmanager.ContentManager.set_content` method
 | 
					
						
							|  |  |  |       of the *content_manager*, passing self as the message object, and passing
 | 
					
						
							|  |  |  |       along any other arguments or keywords as additional arguments.  If
 | 
					
						
							|  |  |  |       *content_manager* is not specified, use the ``content_manager`` specified
 | 
					
						
							|  |  |  |       by the current :mod:`~email.policy`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: make_related(boundary=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Convert a non-``multipart`` message into a ``multipart/related`` message,
 | 
					
						
							|  |  |  |       moving any existing :mailheader:`Content-` headers and payload into a
 | 
					
						
							|  |  |  |       (new) first part of the ``multipart``.  If *boundary* is specified, use
 | 
					
						
							|  |  |  |       it as the boundary string in the multipart, otherwise leave the boundary
 | 
					
						
							|  |  |  |       to be automatically created when it is needed (for example, when the
 | 
					
						
							|  |  |  |       message is serialized).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: make_alternative(boundary=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Convert a non-``multipart`` or a ``multipart/related`` into a
 | 
					
						
							|  |  |  |       ``multipart/alternative``, moving any existing :mailheader:`Content-`
 | 
					
						
							|  |  |  |       headers and payload into a (new) first part of the ``multipart``.  If
 | 
					
						
							|  |  |  |       *boundary* is specified, use it as the boundary string in the multipart,
 | 
					
						
							|  |  |  |       otherwise leave the boundary to be automatically created when it is
 | 
					
						
							|  |  |  |       needed (for example, when the message is serialized).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: make_mixed(boundary=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Convert a non-``multipart``, a ``multipart/related``, or a
 | 
					
						
							|  |  |  |       ``multipart-alternative`` into a ``multipart/mixed``, moving any existing
 | 
					
						
							|  |  |  |       :mailheader:`Content-` headers and payload into a (new) first part of the
 | 
					
						
							|  |  |  |       ``multipart``.  If *boundary* is specified, use it as the boundary string
 | 
					
						
							|  |  |  |       in the multipart, otherwise leave the boundary to be automatically
 | 
					
						
							|  |  |  |       created when it is needed (for example, when the message is serialized).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: add_related(*args, content_manager=None, **kw)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If the message is a ``multipart/related``, create a new message
 | 
					
						
							|  |  |  |       object, pass all of the arguments to its :meth:`set_content` method,
 | 
					
						
							|  |  |  |       and :meth:`~email.message.Message.attach` it to the ``multipart``.  If
 | 
					
						
							|  |  |  |       the message is a non-``multipart``, call :meth:`make_related` and then
 | 
					
						
							|  |  |  |       proceed as above.  If the message is any other type of ``multipart``,
 | 
					
						
							|  |  |  |       raise a :exc:`TypeError`. If *content_manager* is not specified, use
 | 
					
						
							|  |  |  |       the ``content_manager`` specified by the current :mod:`~email.policy`.
 | 
					
						
							|  |  |  |       If the added part has no :mailheader:`Content-Disposition` header,
 | 
					
						
							|  |  |  |       add one with the value ``inline``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: add_alternative(*args, content_manager=None, **kw)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If the message is a ``multipart/alternative``, create a new message
 | 
					
						
							|  |  |  |       object, pass all of the arguments to its :meth:`set_content` method, and
 | 
					
						
							|  |  |  |       :meth:`~email.message.Message.attach` it to the ``multipart``.  If the
 | 
					
						
							|  |  |  |       message is a non-``multipart`` or ``multipart/related``, call
 | 
					
						
							|  |  |  |       :meth:`make_alternative` and then proceed as above.  If the message is
 | 
					
						
							|  |  |  |       any other type of ``multipart``, raise a :exc:`TypeError`. If
 | 
					
						
							|  |  |  |       *content_manager* is not specified, use the ``content_manager`` specified
 | 
					
						
							|  |  |  |       by the current :mod:`~email.policy`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: add_attachment(*args, content_manager=None, **kw)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If the message is a ``multipart/mixed``, create a new message object,
 | 
					
						
							|  |  |  |       pass all of the arguments to its :meth:`set_content` method, and
 | 
					
						
							|  |  |  |       :meth:`~email.message.Message.attach` it to the ``multipart``.  If the
 | 
					
						
							|  |  |  |       message is a non-``multipart``, ``multipart/related``, or
 | 
					
						
							|  |  |  |       ``multipart/alternative``, call :meth:`make_mixed` and then proceed as
 | 
					
						
							|  |  |  |       above. If *content_manager* is not specified, use the ``content_manager``
 | 
					
						
							|  |  |  |       specified by the current :mod:`~email.policy`.  If the added part
 | 
					
						
							|  |  |  |       has no :mailheader:`Content-Disposition` header, add one with the value
 | 
					
						
							|  |  |  |       ``attachment``.  This method can be used both for explicit attachments
 | 
					
						
							| 
									
										
										
										
											2018-12-05 16:45:30 -03:00
										 |  |  |       (:mailheader:`Content-Disposition: attachment`) and ``inline`` attachments
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       (:mailheader:`Content-Disposition: inline`), by passing appropriate
 | 
					
						
							|  |  |  |       options to the ``content_manager``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: clear()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Remove the payload and all of the headers.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: clear_content()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Remove the payload and all of the :exc:`Content-` headers, leaving
 | 
					
						
							|  |  |  |       all other headers intact and in their original order.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    :class:`EmailMessage` objects have the following instance attributes:
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: preamble
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       The format of a MIME document allows for some text between the blank line
 | 
					
						
							|  |  |  |       following the headers, and the first multipart boundary string. Normally,
 | 
					
						
							|  |  |  |       this text is never visible in a MIME-aware mail reader because it falls
 | 
					
						
							|  |  |  |       outside the standard MIME armor.  However, when viewing the raw text of
 | 
					
						
							|  |  |  |       the message, or when viewing the message in a non-MIME aware reader, this
 | 
					
						
							|  |  |  |       text can become visible.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       The *preamble* attribute contains this leading extra-armor text for MIME
 | 
					
						
							| 
									
										
										
										
											2009-04-27 16:46:17 +00:00
										 |  |  |       documents.  When the :class:`~email.parser.Parser` discovers some text
 | 
					
						
							|  |  |  |       after the headers but before the first boundary string, it assigns this
 | 
					
						
							|  |  |  |       text to the message's *preamble* attribute.  When the
 | 
					
						
							|  |  |  |       :class:`~email.generator.Generator` is writing out the plain text
 | 
					
						
							|  |  |  |       representation of a MIME message, and it finds the
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       message has a *preamble* attribute, it will write this text in the area
 | 
					
						
							|  |  |  |       between the headers and the first boundary.  See :mod:`email.parser` and
 | 
					
						
							|  |  |  |       :mod:`email.generator` for details.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Note that if the message object has no preamble, the *preamble* attribute
 | 
					
						
							|  |  |  |       will be ``None``.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: epilogue
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       The *epilogue* attribute acts the same way as the *preamble* attribute,
 | 
					
						
							|  |  |  |       except that it contains text that appears between the last boundary and
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       the end of the message.  As with the :attr:`~EmailMessage.preamble`,
 | 
					
						
							|  |  |  |       if there is no epilog text this attribute will be ``None``.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: defects
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       The *defects* attribute contains a list of all the problems found when
 | 
					
						
							|  |  |  |       parsing this message.  See :mod:`email.errors` for a detailed description
 | 
					
						
							|  |  |  |       of the possible parsing defects.
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. class:: MIMEPart(policy=default)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     This class represents a subpart of a MIME message.  It is identical to
 | 
					
						
							|  |  |  |     :class:`EmailMessage`, except that no :mailheader:`MIME-Version` headers are
 | 
					
						
							|  |  |  |     added when :meth:`~EmailMessage.set_content` is called, since sub-parts do
 | 
					
						
							|  |  |  |     not need their own :mailheader:`MIME-Version` headers.
 | 
					
						
							| 
									
										
										
										
											2016-09-08 18:28:43 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. rubric:: Footnotes
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-19 14:37:57 -06:00
										 |  |  | .. [1] Originally added in 3.4 as a :term:`provisional module <provisional
 | 
					
						
							| 
									
										
										
										
											2016-09-08 18:28:43 -04:00
										 |  |  |        package>`.  Docs for legacy message class moved to
 | 
					
						
							|  |  |  |        :ref:`compat32_message`.
 |