| 
									
										
										
										
											2012-05-27 17:10:36 -04:00
										 |  |  | :mod:`email.policy`: Policy Objects
 | 
					
						
							|  |  |  | -----------------------------------
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. module:: email.policy
 | 
					
						
							|  |  |  |    :synopsis: Controlling the parsing and generating of messages
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-27 17:10:36 -04:00
										 |  |  | .. moduleauthor:: R. David Murray <rdmurray@bitdance.com>
 | 
					
						
							|  |  |  | .. sectionauthor:: R. David Murray <rdmurray@bitdance.com>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-10 21:43:13 +02:00
										 |  |  | .. versionadded:: 3.3
 | 
					
						
							| 
									
										
										
										
											2011-04-18 16:00:47 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-11 15:02:54 -04:00
										 |  |  | **Source code:** :source:`Lib/email/policy.py`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --------------
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | The :mod:`email` package's prime focus is the handling of email messages as
 | 
					
						
							|  |  |  | described by the various email and MIME RFCs.  However, the general format of
 | 
					
						
							|  |  |  | email messages (a block of header fields each consisting of a name followed by
 | 
					
						
							|  |  |  | a colon followed by a value, the whole block followed by a blank line and an
 | 
					
						
							|  |  |  | arbitrary 'body'), is a format that has found utility outside of the realm of
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | email.  Some of these uses conform fairly closely to the main email RFCs, some
 | 
					
						
							|  |  |  | do not.  Even when working with email, there are times when it is desirable to
 | 
					
						
							|  |  |  | break strict compliance with the RFCs, such as generating emails that
 | 
					
						
							|  |  |  | interoperate with email servers that do not themselves follow the standards, or
 | 
					
						
							|  |  |  | that implement extensions you want to use in ways that violate the
 | 
					
						
							|  |  |  | standards.
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-18 16:00:47 -04:00
										 |  |  | Policy objects give the email package the flexibility to handle all these
 | 
					
						
							|  |  |  | disparate use cases.
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | A :class:`Policy` object encapsulates a set of attributes and methods that
 | 
					
						
							|  |  |  | control the behavior of various components of the email package during use.
 | 
					
						
							|  |  |  | :class:`Policy` instances can be passed to various classes and methods in the
 | 
					
						
							|  |  |  | email package to alter the default behavior.  The settable values and their
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  | defaults are described below.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | There is a default policy used by all classes in the email package.  For all of
 | 
					
						
							|  |  |  | the :mod:`~email.parser` classes and the related convenience functions, and for
 | 
					
						
							|  |  |  | the :class:`~email.message.Message` class, this is the :class:`Compat32`
 | 
					
						
							|  |  |  | policy, via its corresponding pre-defined instance :const:`compat32`.  This
 | 
					
						
							|  |  |  | policy provides for complete backward compatibility (in some cases, including
 | 
					
						
							|  |  |  | bug compatibility) with the pre-Python3.3 version of the email package.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This default value for the *policy* keyword to
 | 
					
						
							|  |  |  | :class:`~email.message.EmailMessage` is the :class:`EmailPolicy` policy, via
 | 
					
						
							|  |  |  | its pre-defined instance :data:`~default`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When a :class:`~email.message.Message` or :class:`~email.message.EmailMessage`
 | 
					
						
							|  |  |  | object is created, it acquires a policy.  If the message is created by a
 | 
					
						
							|  |  |  | :mod:`~email.parser`, a policy passed to the parser will be the policy used by
 | 
					
						
							|  |  |  | the message it creates.  If the message is created by the program, then the
 | 
					
						
							|  |  |  | policy can be specified when it is created.  When a message is passed to a
 | 
					
						
							|  |  |  | :mod:`~email.generator`, the generator uses the policy from the message by
 | 
					
						
							|  |  |  | default, but you can also pass a specific policy to the generator that will
 | 
					
						
							|  |  |  | override the one stored on the message object.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The default value for the *policy* keyword for the :mod:`email.parser` classes
 | 
					
						
							|  |  |  | and the parser convenience functions **will be changing** in a future version of
 | 
					
						
							|  |  |  | Python.  Therefore you should **always specify explicitly which policy you want
 | 
					
						
							|  |  |  | to use** when calling any of the classes and functions described in the
 | 
					
						
							|  |  |  | :mod:`~email.parser` module.
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | The first part of this documentation covers the features of :class:`Policy`, an
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | :term:`abstract base class` that defines the features that are common to all
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  | policy objects, including :const:`compat32`.  This includes certain hook
 | 
					
						
							|  |  |  | methods that are called internally by the email package, which a custom policy
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | could override to obtain different behavior.  The second part describes the
 | 
					
						
							|  |  |  | concrete classes :class:`EmailPolicy` and :class:`Compat32`, which implement
 | 
					
						
							|  |  |  | the hooks that provide the standard behavior and the backward compatible
 | 
					
						
							|  |  |  | behavior and features, respectively.
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | :class:`Policy` instances are immutable, but they can be cloned, accepting the
 | 
					
						
							|  |  |  | same keyword arguments as the class constructor and returning a new
 | 
					
						
							|  |  |  | :class:`Policy` instance that is a copy of the original but with the specified
 | 
					
						
							|  |  |  | attributes values changed.
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | As an example, the following code could be used to read an email message from a
 | 
					
						
							| 
									
										
										
										
											2013-07-29 15:49:58 -04:00
										 |  |  | file on disk and pass it to the system ``sendmail`` program on a Unix system:
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-29 15:49:58 -04:00
										 |  |  | .. testsetup::
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-10 00:39:41 -05:00
										 |  |  |    from unittest import mock
 | 
					
						
							|  |  |  |    mocker = mock.patch('subprocess.Popen')
 | 
					
						
							|  |  |  |    m = mocker.start()
 | 
					
						
							|  |  |  |    proc = mock.MagicMock()
 | 
					
						
							|  |  |  |    m.return_value = proc
 | 
					
						
							|  |  |  |    proc.stdin.close.return_value = None
 | 
					
						
							|  |  |  |    mymsg = open('mymsg.txt', 'w')
 | 
					
						
							|  |  |  |    mymsg.write('To: abc@xyz.com\n\n')
 | 
					
						
							|  |  |  |    mymsg.flush()
 | 
					
						
							| 
									
										
										
										
											2013-07-29 15:49:58 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. doctest::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    >>> from email import message_from_binary_file
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  |    >>> from email.generator import BytesGenerator
 | 
					
						
							| 
									
										
										
										
											2013-07-29 15:49:58 -04:00
										 |  |  |    >>> from email import policy
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  |    >>> from subprocess import Popen, PIPE
 | 
					
						
							| 
									
										
										
										
											2013-07-29 15:49:58 -04:00
										 |  |  |    >>> with open('mymsg.txt', 'rb') as f:
 | 
					
						
							|  |  |  |    ...     msg = message_from_binary_file(f, policy=policy.default)
 | 
					
						
							| 
									
										
										
										
											2022-12-08 19:31:19 -08:00
										 |  |  |    ...
 | 
					
						
							| 
									
										
										
										
											2013-07-29 15:49:58 -04:00
										 |  |  |    >>> p = Popen(['sendmail', msg['To'].addresses[0]], stdin=PIPE)
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |    >>> g = BytesGenerator(p.stdin, policy=msg.policy.clone(linesep='\r\n'))
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  |    >>> g.flatten(msg)
 | 
					
						
							|  |  |  |    >>> p.stdin.close()
 | 
					
						
							|  |  |  |    >>> rc = p.wait()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-10 00:39:41 -05:00
										 |  |  | .. testcleanup::
 | 
					
						
							| 
									
										
										
										
											2013-07-29 15:49:58 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-10 00:39:41 -05:00
										 |  |  |    mymsg.close()
 | 
					
						
							|  |  |  |    mocker.stop()
 | 
					
						
							|  |  |  |    import os
 | 
					
						
							|  |  |  |    os.remove('mymsg.txt')
 | 
					
						
							| 
									
										
										
										
											2013-07-29 15:49:58 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  | Here we are telling :class:`~email.generator.BytesGenerator` to use the RFC
 | 
					
						
							|  |  |  | correct line separator characters when creating the binary string to feed into
 | 
					
						
							|  |  |  | ``sendmail's`` ``stdin``, where the default policy would use ``\n`` line
 | 
					
						
							|  |  |  | separators.
 | 
					
						
							| 
									
										
										
										
											2011-12-03 16:00:56 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | Some email package methods accept a *policy* keyword argument, allowing the
 | 
					
						
							| 
									
										
										
										
											2011-04-18 16:00:47 -04:00
										 |  |  | policy to be overridden for that method.  For example, the following code uses
 | 
					
						
							| 
									
										
										
										
											2014-12-19 11:20:00 -05:00
										 |  |  | the :meth:`~email.message.Message.as_bytes` method of the *msg* object from
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  | the previous example and writes the message to a file using the native line
 | 
					
						
							|  |  |  | separators for the platform on which it is running::
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    >>> import os
 | 
					
						
							|  |  |  |    >>> with open('converted.txt', 'wb') as f:
 | 
					
						
							| 
									
										
										
										
											2013-08-09 16:15:28 -04:00
										 |  |  |    ...     f.write(msg.as_bytes(policy=msg.policy.clone(linesep=os.linesep)))
 | 
					
						
							|  |  |  |    17
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | Policy objects can also be combined using the addition operator, producing a
 | 
					
						
							|  |  |  | policy object whose settings are a combination of the non-default values of the
 | 
					
						
							|  |  |  | summed objects::
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-29 15:49:58 -04:00
										 |  |  |    >>> compat_SMTP = policy.compat32.clone(linesep='\r\n')
 | 
					
						
							|  |  |  |    >>> compat_strict = policy.compat32.clone(raise_on_defect=True)
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |    >>> compat_strict_SMTP = compat_SMTP + compat_strict
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | This operation is not commutative; that is, the order in which the objects are
 | 
					
						
							|  |  |  | added matters.  To illustrate::
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-29 15:49:58 -04:00
										 |  |  |    >>> policy100 = policy.compat32.clone(max_line_length=100)
 | 
					
						
							|  |  |  |    >>> policy80 = policy.compat32.clone(max_line_length=80)
 | 
					
						
							|  |  |  |    >>> apolicy = policy100 + policy80
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  |    >>> apolicy.max_line_length
 | 
					
						
							|  |  |  |    80
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |    >>> apolicy = policy80 + policy100
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  |    >>> apolicy.max_line_length
 | 
					
						
							|  |  |  |    100
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. class:: Policy(**kw)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |    This is the :term:`abstract base class` for all policy classes.  It provides
 | 
					
						
							|  |  |  |    default implementations for a couple of trivial methods, as well as the
 | 
					
						
							|  |  |  |    implementation of the immutability property, the :meth:`clone` method, and
 | 
					
						
							|  |  |  |    the constructor semantics.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The constructor of a policy class can be passed various keyword arguments.
 | 
					
						
							|  |  |  |    The arguments that may be specified are any non-method properties on this
 | 
					
						
							|  |  |  |    class, plus any additional non-method properties on the concrete class.  A
 | 
					
						
							|  |  |  |    value specified in the constructor will override the default value for the
 | 
					
						
							|  |  |  |    corresponding attribute.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This class defines the following properties, and thus values for the
 | 
					
						
							|  |  |  |    following may be passed in the constructor of any policy class:
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  |    .. attribute:: max_line_length
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The maximum length of any line in the serialized output, not counting the
 | 
					
						
							|  |  |  |       end of line character(s).  Default is 78, per :rfc:`5322`.  A value of
 | 
					
						
							|  |  |  |       ``0`` or :const:`None` indicates that no line wrapping should be
 | 
					
						
							|  |  |  |       done at all.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  |    .. attribute:: linesep
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The string to be used to terminate lines in serialized output.  The
 | 
					
						
							| 
									
										
										
										
											2011-04-18 16:00:47 -04:00
										 |  |  |       default is ``\n`` because that's the internal end-of-line discipline used
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |       by Python, though ``\r\n`` is required by the RFCs.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |    .. attribute:: cte_type
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |       Controls the type of Content Transfer Encodings that may be or are
 | 
					
						
							|  |  |  |       required to be used.  The possible values are:
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-28 13:28:44 +01:00
										 |  |  |       .. tabularcolumns:: |l|L|
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |       ========  ===============================================================
 | 
					
						
							|  |  |  |       ``7bit``  all data must be "7 bit clean" (ASCII-only).  This means that
 | 
					
						
							|  |  |  |                 where necessary data will be encoded using either
 | 
					
						
							|  |  |  |                 quoted-printable or base64 encoding.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       ``8bit``  data is not constrained to be 7 bit clean.  Data in headers is
 | 
					
						
							|  |  |  |                 still required to be ASCII-only and so will be encoded (see
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |                 :meth:`fold_binary` and :attr:`~EmailPolicy.utf8` below for
 | 
					
						
							|  |  |  |                 exceptions), but body parts may use the ``8bit`` CTE.
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |       ========  ===============================================================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       A ``cte_type`` value of ``8bit`` only works with ``BytesGenerator``, not
 | 
					
						
							|  |  |  |       ``Generator``, because strings cannot contain binary data.  If a
 | 
					
						
							|  |  |  |       ``Generator`` is operating under a policy that specifies
 | 
					
						
							|  |  |  |       ``cte_type=8bit``, it will act as if ``cte_type`` is ``7bit``.
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  |    .. attribute:: raise_on_defect
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If :const:`True`, any defects encountered will be raised as errors.  If
 | 
					
						
							|  |  |  |       :const:`False` (the default), defects will be passed to the
 | 
					
						
							|  |  |  |       :meth:`register_defect` method.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-17 14:24:33 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 22:37:28 -03:00
										 |  |  |    .. attribute:: mangle_from_
 | 
					
						
							| 
									
										
										
										
											2015-05-17 14:24:33 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       If :const:`True`, lines starting with *"From "* in the body are
 | 
					
						
							|  |  |  |       escaped by putting a ``>`` in front of them. This parameter is used when
 | 
					
						
							|  |  |  |       the message is being serialized by a generator.
 | 
					
						
							|  |  |  |       Default: :const:`False`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. versionadded:: 3.5
 | 
					
						
							|  |  |  |          The *mangle_from_* parameter.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-09 18:39:18 -04:00
										 |  |  |    .. attribute:: message_factory
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       A factory function for constructing a new empty message object.  Used
 | 
					
						
							| 
									
										
										
										
											2016-09-10 00:22:25 -04:00
										 |  |  |       by the parser when building messages.  Defaults to ``None``, in
 | 
					
						
							|  |  |  |       which case :class:`~email.message.Message` is used.
 | 
					
						
							| 
									
										
										
										
											2016-09-09 18:39:18 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       .. versionadded:: 3.6
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |    The following :class:`Policy` method is intended to be called by code using
 | 
					
						
							|  |  |  |    the email library to create policy instances with custom settings:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |    .. method:: clone(**kw)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Return a new :class:`Policy` instance whose attributes have the same
 | 
					
						
							|  |  |  |       values as the current instance, except where those attributes are
 | 
					
						
							|  |  |  |       given new values by the keyword arguments.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |    The remaining :class:`Policy` methods are called by the email package code,
 | 
					
						
							|  |  |  |    and are not intended to be called by an application using the email package.
 | 
					
						
							|  |  |  |    A custom policy must implement all of these methods.
 | 
					
						
							| 
									
										
										
										
											2011-04-18 16:00:47 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  |    .. method:: handle_defect(obj, defect)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |       Handle a *defect* found on *obj*.  When the email package calls this
 | 
					
						
							|  |  |  |       method, *defect* will always be a subclass of
 | 
					
						
							|  |  |  |       :class:`~email.errors.Defect`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The default implementation checks the :attr:`raise_on_defect` flag.  If
 | 
					
						
							|  |  |  |       it is ``True``, *defect* is raised as an exception.  If it is ``False``
 | 
					
						
							|  |  |  |       (the default), *obj* and *defect* are passed to :meth:`register_defect`.
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  |    .. method:: register_defect(obj, defect)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |       Register a *defect* on *obj*.  In the email package, *defect* will always
 | 
					
						
							|  |  |  |       be a subclass of :class:`~email.errors.Defect`.
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |       The default implementation calls the ``append`` method of the ``defects``
 | 
					
						
							|  |  |  |       attribute of *obj*.  When the email package calls :attr:`handle_defect`,
 | 
					
						
							|  |  |  |       *obj* will normally have a ``defects`` attribute that has an ``append``
 | 
					
						
							|  |  |  |       method.  Custom object types used with the email package (for example,
 | 
					
						
							|  |  |  |       custom ``Message`` objects) should also provide such an attribute,
 | 
					
						
							|  |  |  |       otherwise defects in parsed messages will raise unexpected errors.
 | 
					
						
							| 
									
										
										
										
											2011-04-18 13:59:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-29 09:14:44 -04:00
										 |  |  |    .. method:: header_max_count(name)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Return the maximum allowed number of headers named *name*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       Called when a header is added to an :class:`~email.message.EmailMessage`
 | 
					
						
							|  |  |  |       or :class:`~email.message.Message` object.  If the returned value is not
 | 
					
						
							|  |  |  |       ``0`` or ``None``, and there are already a number of headers with the
 | 
					
						
							| 
									
										
										
										
											2017-05-19 14:37:57 -06:00
										 |  |  |       name *name* greater than or equal to the value returned, a
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       :exc:`ValueError` is raised.
 | 
					
						
							| 
									
										
										
										
											2012-05-29 09:14:44 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       Because the default behavior of ``Message.__setitem__`` is to append the
 | 
					
						
							|  |  |  |       value to the list of headers, it is easy to create duplicate headers
 | 
					
						
							|  |  |  |       without realizing it.  This method allows certain headers to be limited
 | 
					
						
							|  |  |  |       in the number of instances of that header that may be added to a
 | 
					
						
							|  |  |  |       ``Message`` programmatically.  (The limit is not observed by the parser,
 | 
					
						
							|  |  |  |       which will faithfully produce as many headers as exist in the message
 | 
					
						
							|  |  |  |       being parsed.)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The default implementation returns ``None`` for all header names.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |    .. method:: header_source_parse(sourcelines)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The email package calls this method with a list of strings, each string
 | 
					
						
							|  |  |  |       ending with the line separation characters found in the source being
 | 
					
						
							|  |  |  |       parsed.  The first line includes the field header name and separator.
 | 
					
						
							|  |  |  |       All whitespace in the source is preserved.  The method should return the
 | 
					
						
							|  |  |  |       ``(name, value)`` tuple that is to be stored in the ``Message`` to
 | 
					
						
							|  |  |  |       represent the parsed header.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If an implementation wishes to retain compatibility with the existing
 | 
					
						
							|  |  |  |       email package policies, *name* should be the case preserved name (all
 | 
					
						
							|  |  |  |       characters up to the '``:``' separator), while *value* should be the
 | 
					
						
							|  |  |  |       unfolded value (all line separator characters removed, but whitespace
 | 
					
						
							|  |  |  |       kept intact), stripped of leading whitespace.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       *sourcelines* may contain surrogateescaped binary data.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       There is no default implementation
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |    .. method:: header_store_parse(name, value)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The email package calls this method with the name and value provided by
 | 
					
						
							|  |  |  |       the application program when the application program is modifying a
 | 
					
						
							|  |  |  |       ``Message`` programmatically (as opposed to a ``Message`` created by a
 | 
					
						
							|  |  |  |       parser).  The method should return the ``(name, value)`` tuple that is to
 | 
					
						
							|  |  |  |       be stored in the ``Message`` to represent the header.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If an implementation wishes to retain compatibility with the existing
 | 
					
						
							|  |  |  |       email package policies, the *name* and *value* should be strings or
 | 
					
						
							|  |  |  |       string subclasses that do not change the content of the passed in
 | 
					
						
							|  |  |  |       arguments.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       There is no default implementation
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |    .. method:: header_fetch_parse(name, value)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The email package calls this method with the *name* and *value* currently
 | 
					
						
							|  |  |  |       stored in the ``Message`` when that header is requested by the
 | 
					
						
							|  |  |  |       application program, and whatever the method returns is what is passed
 | 
					
						
							|  |  |  |       back to the application as the value of the header being retrieved.
 | 
					
						
							|  |  |  |       Note that there may be more than one header with the same name stored in
 | 
					
						
							|  |  |  |       the ``Message``; the method is passed the specific name and value of the
 | 
					
						
							|  |  |  |       header destined to be returned to the application.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       *value* may contain surrogateescaped binary data.  There should be no
 | 
					
						
							|  |  |  |       surrogateescaped binary data in the value returned by the method.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       There is no default implementation
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |    .. method:: fold(name, value)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The email package calls this method with the *name* and *value* currently
 | 
					
						
							|  |  |  |       stored in the ``Message`` for a given header.  The method should return a
 | 
					
						
							|  |  |  |       string that represents that header "folded" correctly (according to the
 | 
					
						
							|  |  |  |       policy settings) by composing the *name* with the *value* and inserting
 | 
					
						
							|  |  |  |       :attr:`linesep` characters at the appropriate places.  See :rfc:`5322`
 | 
					
						
							|  |  |  |       for a discussion of the rules for folding email headers.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       *value* may contain surrogateescaped binary data.  There should be no
 | 
					
						
							|  |  |  |       surrogateescaped binary data in the string returned by the method.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 15:01:48 -04:00
										 |  |  |    .. method:: fold_binary(name, value)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The same as :meth:`fold`, except that the returned value should be a
 | 
					
						
							|  |  |  |       bytes object rather than a string.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       *value* may contain surrogateescaped binary data.  These could be
 | 
					
						
							|  |  |  |       converted back into binary data in the returned bytes object.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. class:: EmailPolicy(**kw)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This concrete :class:`Policy` provides behavior that is intended to be fully
 | 
					
						
							|  |  |  |    compliant with the current email RFCs.  These include (but are not limited
 | 
					
						
							|  |  |  |    to) :rfc:`5322`, :rfc:`2047`, and the current MIME RFCs.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This policy adds new header parsing and folding algorithms.  Instead of
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  |    simple strings, headers are ``str`` subclasses with attributes that depend
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |    on the type of the field.  The parsing and folding algorithm fully implement
 | 
					
						
							|  |  |  |    :rfc:`2047` and :rfc:`5322`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-09 18:39:18 -04:00
										 |  |  |    The default value for the :attr:`~email.policy.Policy.message_factory`
 | 
					
						
							|  |  |  |    attribute is :class:`~email.message.EmailMessage`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |    In addition to the settable attributes listed above that apply to all
 | 
					
						
							|  |  |  |    policies, this policy adds the following additional attributes:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-08 18:28:43 -04:00
										 |  |  |    .. versionadded:: 3.6 [1]_
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-17 11:29:21 -04:00
										 |  |  |    .. attribute:: utf8
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If ``False``, follow :rfc:`5322`, supporting non-ASCII characters in
 | 
					
						
							|  |  |  |       headers by encoding them as "encoded words".  If ``True``, follow
 | 
					
						
							|  |  |  |       :rfc:`6532` and use ``utf-8`` encoding for headers.  Messages
 | 
					
						
							|  |  |  |       formatted in this way may be passed to SMTP servers that support
 | 
					
						
							|  |  |  |       the ``SMTPUTF8`` extension (:rfc:`6531`).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |    .. attribute:: refold_source
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If the value for a header in the ``Message`` object originated from a
 | 
					
						
							|  |  |  |       :mod:`~email.parser` (as opposed to being set by a program), this
 | 
					
						
							|  |  |  |       attribute indicates whether or not a generator should refold that value
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       when transforming the message back into serialized form.  The possible
 | 
					
						
							|  |  |  |       values are:
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       ========  ===============================================================
 | 
					
						
							|  |  |  |       ``none``  all source values use original folding
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       ``long``  source values that have any line that is longer than
 | 
					
						
							|  |  |  |                 ``max_line_length`` will be refolded
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       ``all``   all values are refolded.
 | 
					
						
							|  |  |  |       ========  ===============================================================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The default is ``long``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |    .. attribute:: header_factory
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       A callable that takes two arguments, ``name`` and ``value``, where
 | 
					
						
							|  |  |  |       ``name`` is a header field name and ``value`` is an unfolded header field
 | 
					
						
							| 
									
										
										
										
											2012-05-27 15:03:38 -04:00
										 |  |  |       value, and returns a string subclass that represents that header.  A
 | 
					
						
							|  |  |  |       default ``header_factory`` (see :mod:`~email.headerregistry`) is provided
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       that supports custom parsing for the various address and date :RFC:`5322`
 | 
					
						
							|  |  |  |       header field types, and the major MIME header field stypes.  Support for
 | 
					
						
							|  |  |  |       additional custom parsing will be added in the future.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  |    .. attribute:: content_manager
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       An object with at least two methods: get_content and set_content.  When
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  |       the :meth:`~email.message.EmailMessage.get_content` or
 | 
					
						
							|  |  |  |       :meth:`~email.message.EmailMessage.set_content` method of an
 | 
					
						
							|  |  |  |       :class:`~email.message.EmailMessage` object is called, it calls the
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  |       corresponding method of this object, passing it the message object as its
 | 
					
						
							|  |  |  |       first argument, and any arguments or keywords that were passed to it as
 | 
					
						
							|  |  |  |       additional arguments.  By default ``content_manager`` is set to
 | 
					
						
							|  |  |  |       :data:`~email.contentmanager.raw_data_manager`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-15 21:13:56 -07:00
										 |  |  |       .. versionadded:: 3.4
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |    The class provides the following concrete implementations of the abstract
 | 
					
						
							|  |  |  |    methods of :class:`Policy`:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-29 09:14:44 -04:00
										 |  |  |    .. method:: header_max_count(name)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Returns the value of the
 | 
					
						
							|  |  |  |       :attr:`~email.headerregistry.BaseHeader.max_count` attribute of the
 | 
					
						
							|  |  |  |       specialized class used to represent the header with the given name.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |    .. method:: header_source_parse(sourcelines)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       The name is parsed as everything up to the '``:``' and returned
 | 
					
						
							|  |  |  |       unmodified.  The value is determined by stripping leading whitespace off
 | 
					
						
							|  |  |  |       the remainder of the first line, joining all subsequent lines together,
 | 
					
						
							|  |  |  |       and stripping any trailing carriage return or linefeed characters.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. method:: header_store_parse(name, value)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The name is returned unchanged.  If the input value has a ``name``
 | 
					
						
							|  |  |  |       attribute and it matches *name* ignoring case, the value is returned
 | 
					
						
							|  |  |  |       unchanged.  Otherwise the *name* and *value* are passed to
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  |       ``header_factory``, and the resulting header object is returned as
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |       the value.  In this case a ``ValueError`` is raised if the input value
 | 
					
						
							|  |  |  |       contains CR or LF characters.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |    .. method:: header_fetch_parse(name, value)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If the value has a ``name`` attribute, it is returned to unmodified.
 | 
					
						
							|  |  |  |       Otherwise the *name*, and the *value* with any CR or LF characters
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  |       removed, are passed to the ``header_factory``, and the resulting
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |       header object is returned.  Any surrogateescaped bytes get turned into
 | 
					
						
							|  |  |  |       the unicode unknown-character glyph.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |    .. method:: fold(name, value)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Header folding is controlled by the :attr:`refold_source` policy setting.
 | 
					
						
							|  |  |  |       A value is considered to be a 'source value' if and only if it does not
 | 
					
						
							|  |  |  |       have a ``name`` attribute (having a ``name`` attribute means it is a
 | 
					
						
							|  |  |  |       header object of some sort).  If a source value needs to be refolded
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  |       according to the policy, it is converted into a header object by
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |       passing the *name* and the *value* with any CR and LF characters removed
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  |       to the ``header_factory``.  Folding of a header object is done by
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |       calling its ``fold`` method with the current policy.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Source values are split into lines using :meth:`~str.splitlines`.  If
 | 
					
						
							|  |  |  |       the value is not to be refolded, the lines are rejoined using the
 | 
					
						
							|  |  |  |       ``linesep`` from the policy and returned.  The exception is lines
 | 
					
						
							|  |  |  |       containing non-ascii binary data.  In that case the value is refolded
 | 
					
						
							|  |  |  |       regardless of the ``refold_source`` setting, which causes the binary data
 | 
					
						
							|  |  |  |       to be CTE encoded using the ``unknown-8bit`` charset.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |    .. method:: fold_binary(name, value)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-19 09:59:18 +03:00
										 |  |  |       The same as :meth:`fold` if :attr:`~Policy.cte_type` is ``7bit``, except
 | 
					
						
							|  |  |  |       that the returned value is bytes.
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-19 09:59:18 +03:00
										 |  |  |       If :attr:`~Policy.cte_type` is ``8bit``, non-ASCII binary data is
 | 
					
						
							|  |  |  |       converted back
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |       into bytes.  Headers with binary data are not refolded, regardless of the
 | 
					
						
							|  |  |  |       ``refold_header`` setting, since there is no way to know whether the
 | 
					
						
							|  |  |  |       binary data consists of single byte characters or multibyte characters.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | The following instances of :class:`EmailPolicy` provide defaults suitable for
 | 
					
						
							|  |  |  | specific application domains.  Note that in the future the behavior of these
 | 
					
						
							| 
									
										
										
										
											2012-05-27 09:31:10 +02:00
										 |  |  | instances (in particular the ``HTTP`` instance) may be adjusted to conform even
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | more closely to the RFCs relevant to their domains.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | .. data:: default
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    An instance of ``EmailPolicy`` with all defaults unchanged.  This policy
 | 
					
						
							|  |  |  |    uses the standard Python ``\n`` line endings rather than the RFC-correct
 | 
					
						
							|  |  |  |    ``\r\n``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | .. data:: SMTP
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Suitable for serializing messages in conformance with the email RFCs.
 | 
					
						
							|  |  |  |    Like ``default``, but with ``linesep`` set to ``\r\n``, which is RFC
 | 
					
						
							|  |  |  |    compliant.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-17 19:36:16 -04:00
										 |  |  | .. data:: SMTPUTF8
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The same as ``SMTP`` except that :attr:`~EmailPolicy.utf8` is ``True``.
 | 
					
						
							|  |  |  |    Useful for serializing messages to a message store without using encoded
 | 
					
						
							| 
									
										
										
										
											2017-05-19 14:37:57 -06:00
										 |  |  |    words in the headers.  Should only be used for SMTP transmission if the
 | 
					
						
							| 
									
										
										
										
											2015-05-17 19:36:16 -04:00
										 |  |  |    sender or recipient addresses have non-ASCII characters (the
 | 
					
						
							|  |  |  |    :meth:`smtplib.SMTP.send_message` method handles this automatically).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | .. data:: HTTP
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Suitable for serializing headers with for use in HTTP traffic.  Like
 | 
					
						
							|  |  |  |    ``SMTP`` except that ``max_line_length`` is set to ``None`` (unlimited).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | .. data:: strict
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Convenience instance.  The same as ``default`` except that
 | 
					
						
							|  |  |  |    ``raise_on_defect`` is set to ``True``.  This allows any policy to be made
 | 
					
						
							|  |  |  |    strict by writing::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         somepolicy + policy.strict
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | With all of these :class:`EmailPolicies <.EmailPolicy>`, the effective API of
 | 
					
						
							|  |  |  | the email package is changed from the Python 3.2 API in the following ways:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    * Setting a header on a :class:`~email.message.Message` results in that
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  |      header being parsed and a header object created.
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |    * Fetching a header value from a :class:`~email.message.Message` results
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  |      in that header being parsed and a header object created and
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |      returned.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  |    * Any header object, or any header that is refolded due to the
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  |      policy settings, is folded using an algorithm that fully implements the
 | 
					
						
							|  |  |  |      RFC folding algorithms, including knowing where encoded words are required
 | 
					
						
							|  |  |  |      and allowed.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | From the application view, this means that any header obtained through the
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | :class:`~email.message.EmailMessage` is a header object with extra
 | 
					
						
							| 
									
										
										
										
											2012-05-25 18:42:14 -04:00
										 |  |  | attributes, whose string value is the fully decoded unicode value of the
 | 
					
						
							|  |  |  | header.  Likewise, a header may be assigned a new value, or a new header
 | 
					
						
							|  |  |  | created, using a unicode string, and the policy will take care of converting
 | 
					
						
							|  |  |  | the unicode string into the correct RFC encoded form.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-16 22:48:40 -04:00
										 |  |  | The header objects and their attributes are described in
 | 
					
						
							| 
									
										
										
										
											2012-05-27 15:03:38 -04:00
										 |  |  | :mod:`~email.headerregistry`.
 | 
					
						
							| 
									
										
										
										
											2016-09-07 21:15:59 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. class:: Compat32(**kw)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This concrete :class:`Policy` is the backward compatibility policy.  It
 | 
					
						
							|  |  |  |    replicates the behavior of the email package in Python 3.2.  The
 | 
					
						
							|  |  |  |    :mod:`~email.policy` module also defines an instance of this class,
 | 
					
						
							|  |  |  |    :const:`compat32`, that is used as the default policy.  Thus the default
 | 
					
						
							|  |  |  |    behavior of the email package is to maintain compatibility with Python 3.2.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The following attributes have values that are different from the
 | 
					
						
							|  |  |  |    :class:`Policy` default:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: mangle_from_
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The default is ``True``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The class provides the following concrete implementations of the
 | 
					
						
							|  |  |  |    abstract methods of :class:`Policy`:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: header_source_parse(sourcelines)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The name is parsed as everything up to the '``:``' and returned
 | 
					
						
							|  |  |  |       unmodified.  The value is determined by stripping leading whitespace off
 | 
					
						
							|  |  |  |       the remainder of the first line, joining all subsequent lines together,
 | 
					
						
							|  |  |  |       and stripping any trailing carriage return or linefeed characters.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: header_store_parse(name, value)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The name and value are returned unmodified.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: header_fetch_parse(name, value)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       If the value contains binary data, it is converted into a
 | 
					
						
							|  |  |  |       :class:`~email.header.Header` object using the ``unknown-8bit`` charset.
 | 
					
						
							|  |  |  |       Otherwise it is returned unmodified.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: fold(name, value)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Headers are folded using the :class:`~email.header.Header` folding
 | 
					
						
							|  |  |  |       algorithm, which preserves existing line breaks in the value, and wraps
 | 
					
						
							|  |  |  |       each resulting line to the ``max_line_length``.  Non-ASCII binary data are
 | 
					
						
							|  |  |  |       CTE encoded using the ``unknown-8bit`` charset.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: fold_binary(name, value)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Headers are folded using the :class:`~email.header.Header` folding
 | 
					
						
							|  |  |  |       algorithm, which preserves existing line breaks in the value, and wraps
 | 
					
						
							|  |  |  |       each resulting line to the ``max_line_length``.  If ``cte_type`` is
 | 
					
						
							|  |  |  |       ``7bit``, non-ascii binary data is CTE encoded using the ``unknown-8bit``
 | 
					
						
							|  |  |  |       charset.  Otherwise the original source header is used, with its existing
 | 
					
						
							|  |  |  |       line breaks and any (RFC invalid) binary data it may contain.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. data:: compat32
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    An instance of :class:`Compat32`, providing  backward compatibility with the
 | 
					
						
							|  |  |  |    behavior of the email package in Python 3.2.
 | 
					
						
							| 
									
										
										
										
											2016-09-08 18:28:43 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. rubric:: Footnotes
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-19 14:37:57 -06:00
										 |  |  | .. [1] Originally added in 3.3 as a :term:`provisional feature <provisional
 | 
					
						
							| 
									
										
										
										
											2016-09-08 18:28:43 -04:00
										 |  |  |        package>`.
 |