blob: cb2023c0ed38347ff4c038b1486b3270244e0aa1 [file] [log] [blame]
R David Murray79cf3ba2012-05-27 17:10:36 -04001:mod:`email.policy`: Policy Objects
2-----------------------------------
R David Murray3edd22a2011-04-18 13:59:37 -04003
4.. module:: email.policy
5 :synopsis: Controlling the parsing and generating of messages
6
R David Murray79cf3ba2012-05-27 17:10:36 -04007.. moduleauthor:: R. David Murray <rdmurray@bitdance.com>
8.. sectionauthor:: R. David Murray <rdmurray@bitdance.com>
9
Éric Araujo54dbfbd2011-08-10 21:43:13 +020010.. versionadded:: 3.3
R David Murray6a45d3b2011-04-18 16:00:47 -040011
R David Murray3edd22a2011-04-18 13:59:37 -040012
13The :mod:`email` package's prime focus is the handling of email messages as
14described by the various email and MIME RFCs. However, the general format of
15email messages (a block of header fields each consisting of a name followed by
16a colon followed by a value, the whole block followed by a blank line and an
17arbitrary 'body'), is a format that has found utility outside of the realm of
18email. Some of these uses conform fairly closely to the main RFCs, some do
19not. And even when working with email, there are times when it is desirable to
20break strict compliance with the RFCs.
21
R David Murray6a45d3b2011-04-18 16:00:47 -040022Policy objects give the email package the flexibility to handle all these
23disparate use cases.
R David Murray3edd22a2011-04-18 13:59:37 -040024
25A :class:`Policy` object encapsulates a set of attributes and methods that
26control the behavior of various components of the email package during use.
27:class:`Policy` instances can be passed to various classes and methods in the
28email package to alter the default behavior. The settable values and their
R David Murrayc27e5222012-05-25 15:01:48 -040029defaults are described below.
R David Murray3edd22a2011-04-18 13:59:37 -040030
R David Murrayc27e5222012-05-25 15:01:48 -040031There is a default policy used by all classes in the email package. This
32policy is named :class:`Compat32`, with a corresponding pre-defined instance
33named :const:`compat32`. It provides for complete backward compatibility (in
34some cases, including bug compatibility) with the pre-Python3.3 version of the
35email package.
36
37The first part of this documentation covers the features of :class:`Policy`, an
38:term:`abstract base class` that defines the features that are common to all
39policy objects, including :const:`compat32`. This includes certain hook
40methods that are called internally by the email package, which a custom policy
41could override to obtain different behavior.
42
43When a :class:`~email.message.Message` object is created, it acquires a policy.
44By default this will be :const:`compat32`, but a different policy can be
45specified. If the ``Message`` is created by a :mod:`~email.parser`, a policy
46passed to the parser will be the policy used by the ``Message`` it creates. If
47the ``Message`` is created by the program, then the policy can be specified
48when it is created. When a ``Message`` is passed to a :mod:`~email.generator`,
49the generator uses the policy from the ``Message`` by default, but you can also
50pass a specific policy to the generator that will override the one stored on
51the ``Message`` object.
52
53:class:`Policy` instances are immutable, but they can be cloned, accepting the
54same keyword arguments as the class constructor and returning a new
55:class:`Policy` instance that is a copy of the original but with the specified
56attributes values changed.
R David Murray3edd22a2011-04-18 13:59:37 -040057
58As an example, the following code could be used to read an email message from a
R David Murrayfdfb0052013-07-29 15:49:58 -040059file on disk and pass it to the system ``sendmail`` program on a Unix system:
R David Murray3edd22a2011-04-18 13:59:37 -040060
R David Murrayfdfb0052013-07-29 15:49:58 -040061.. testsetup::
62
63 >>> from unittest import mock
64 >>> mocker = mock.patch('subprocess.Popen')
65 >>> m = mocker.start()
66 >>> proc = mock.MagicMock()
67 >>> m.return_value = proc
68 >>> proc.stdin.close.return_value = None
69 >>> mymsg = open('mymsg.txt', 'w')
70 >>> mymsg.write('To: abc@xyz.com\n\n')
71 17
72 >>> mymsg.flush()
73
74.. doctest::
75
76 >>> from email import message_from_binary_file
R David Murray3edd22a2011-04-18 13:59:37 -040077 >>> from email.generator import BytesGenerator
R David Murrayfdfb0052013-07-29 15:49:58 -040078 >>> from email import policy
R David Murray3edd22a2011-04-18 13:59:37 -040079 >>> from subprocess import Popen, PIPE
R David Murrayfdfb0052013-07-29 15:49:58 -040080 >>> with open('mymsg.txt', 'rb') as f:
81 ... msg = message_from_binary_file(f, policy=policy.default)
82 >>> p = Popen(['sendmail', msg['To'].addresses[0]], stdin=PIPE)
R David Murrayc27e5222012-05-25 15:01:48 -040083 >>> g = BytesGenerator(p.stdin, policy=msg.policy.clone(linesep='\r\n'))
R David Murray3edd22a2011-04-18 13:59:37 -040084 >>> g.flatten(msg)
85 >>> p.stdin.close()
86 >>> rc = p.wait()
87
R David Murray11bfd322013-07-30 14:42:40 -040088.. testsetup::
R David Murrayfdfb0052013-07-29 15:49:58 -040089
90 >>> mymsg.close()
91 >>> mocker.stop()
92 >>> import os
93 >>> os.remove('mymsg.txt')
94
R David Murrayc27e5222012-05-25 15:01:48 -040095Here we are telling :class:`~email.generator.BytesGenerator` to use the RFC
96correct line separator characters when creating the binary string to feed into
97``sendmail's`` ``stdin``, where the default policy would use ``\n`` line
98separators.
Éric Araujofe0472e2011-12-03 16:00:56 +010099
R David Murray3edd22a2011-04-18 13:59:37 -0400100Policy objects can also be combined using the addition operator, producing a
101policy object whose settings are a combination of the non-default values of the
102summed objects::
103
R David Murrayfdfb0052013-07-29 15:49:58 -0400104 >>> compat_SMTP = policy.compat32.clone(linesep='\r\n')
105 >>> compat_strict = policy.compat32.clone(raise_on_defect=True)
R David Murrayc27e5222012-05-25 15:01:48 -0400106 >>> compat_strict_SMTP = compat_SMTP + compat_strict
R David Murray3edd22a2011-04-18 13:59:37 -0400107
108This operation is not commutative; that is, the order in which the objects are
109added matters. To illustrate::
110
R David Murrayfdfb0052013-07-29 15:49:58 -0400111 >>> policy100 = policy.compat32.clone(max_line_length=100)
112 >>> policy80 = policy.compat32.clone(max_line_length=80)
113 >>> apolicy = policy100 + policy80
R David Murray3edd22a2011-04-18 13:59:37 -0400114 >>> apolicy.max_line_length
115 80
R David Murrayc27e5222012-05-25 15:01:48 -0400116 >>> apolicy = policy80 + policy100
R David Murray3edd22a2011-04-18 13:59:37 -0400117 >>> apolicy.max_line_length
118 100
119
120
121.. class:: Policy(**kw)
122
R David Murrayc27e5222012-05-25 15:01:48 -0400123 This is the :term:`abstract base class` for all policy classes. It provides
124 default implementations for a couple of trivial methods, as well as the
125 implementation of the immutability property, the :meth:`clone` method, and
126 the constructor semantics.
127
128 The constructor of a policy class can be passed various keyword arguments.
129 The arguments that may be specified are any non-method properties on this
130 class, plus any additional non-method properties on the concrete class. A
131 value specified in the constructor will override the default value for the
132 corresponding attribute.
133
134 This class defines the following properties, and thus values for the
135 following may be passed in the constructor of any policy class:
R David Murray3edd22a2011-04-18 13:59:37 -0400136
137 .. attribute:: max_line_length
138
139 The maximum length of any line in the serialized output, not counting the
140 end of line character(s). Default is 78, per :rfc:`5322`. A value of
141 ``0`` or :const:`None` indicates that no line wrapping should be
142 done at all.
143
144 .. attribute:: linesep
145
146 The string to be used to terminate lines in serialized output. The
R David Murray6a45d3b2011-04-18 16:00:47 -0400147 default is ``\n`` because that's the internal end-of-line discipline used
R David Murrayc27e5222012-05-25 15:01:48 -0400148 by Python, though ``\r\n`` is required by the RFCs.
R David Murray3edd22a2011-04-18 13:59:37 -0400149
R David Murrayc27e5222012-05-25 15:01:48 -0400150 .. attribute:: cte_type
R David Murray3edd22a2011-04-18 13:59:37 -0400151
R David Murrayc27e5222012-05-25 15:01:48 -0400152 Controls the type of Content Transfer Encodings that may be or are
153 required to be used. The possible values are:
154
Georg Brandl44ea77b2013-03-28 13:28:44 +0100155 .. tabularcolumns:: |l|L|
156
R David Murrayc27e5222012-05-25 15:01:48 -0400157 ======== ===============================================================
158 ``7bit`` all data must be "7 bit clean" (ASCII-only). This means that
159 where necessary data will be encoded using either
160 quoted-printable or base64 encoding.
161
162 ``8bit`` data is not constrained to be 7 bit clean. Data in headers is
163 still required to be ASCII-only and so will be encoded (see
164 'binary_fold' below for an exception), but body parts may use
165 the ``8bit`` CTE.
166 ======== ===============================================================
167
168 A ``cte_type`` value of ``8bit`` only works with ``BytesGenerator``, not
169 ``Generator``, because strings cannot contain binary data. If a
170 ``Generator`` is operating under a policy that specifies
171 ``cte_type=8bit``, it will act as if ``cte_type`` is ``7bit``.
R David Murray3edd22a2011-04-18 13:59:37 -0400172
173 .. attribute:: raise_on_defect
174
175 If :const:`True`, any defects encountered will be raised as errors. If
176 :const:`False` (the default), defects will be passed to the
177 :meth:`register_defect` method.
178
R David Murrayc27e5222012-05-25 15:01:48 -0400179 The following :class:`Policy` method is intended to be called by code using
180 the email library to create policy instances with custom settings:
R David Murray6a45d3b2011-04-18 16:00:47 -0400181
R David Murrayc27e5222012-05-25 15:01:48 -0400182 .. method:: clone(**kw)
R David Murray3edd22a2011-04-18 13:59:37 -0400183
184 Return a new :class:`Policy` instance whose attributes have the same
185 values as the current instance, except where those attributes are
186 given new values by the keyword arguments.
187
R David Murrayc27e5222012-05-25 15:01:48 -0400188 The remaining :class:`Policy` methods are called by the email package code,
189 and are not intended to be called by an application using the email package.
190 A custom policy must implement all of these methods.
R David Murray3edd22a2011-04-18 13:59:37 -0400191
R David Murrayc27e5222012-05-25 15:01:48 -0400192 .. method:: handle_defect(obj, defect)
R David Murray3edd22a2011-04-18 13:59:37 -0400193
R David Murrayc27e5222012-05-25 15:01:48 -0400194 Handle a *defect* found on *obj*. When the email package calls this
195 method, *defect* will always be a subclass of
196 :class:`~email.errors.Defect`.
R David Murray3edd22a2011-04-18 13:59:37 -0400197
R David Murrayc27e5222012-05-25 15:01:48 -0400198 The default implementation checks the :attr:`raise_on_defect` flag. If
199 it is ``True``, *defect* is raised as an exception. If it is ``False``
200 (the default), *obj* and *defect* are passed to :meth:`register_defect`.
R David Murray3edd22a2011-04-18 13:59:37 -0400201
R David Murrayc27e5222012-05-25 15:01:48 -0400202 .. method:: register_defect(obj, defect)
R David Murray3edd22a2011-04-18 13:59:37 -0400203
R David Murrayc27e5222012-05-25 15:01:48 -0400204 Register a *defect* on *obj*. In the email package, *defect* will always
205 be a subclass of :class:`~email.errors.Defect`.
R David Murray3edd22a2011-04-18 13:59:37 -0400206
R David Murrayc27e5222012-05-25 15:01:48 -0400207 The default implementation calls the ``append`` method of the ``defects``
208 attribute of *obj*. When the email package calls :attr:`handle_defect`,
209 *obj* will normally have a ``defects`` attribute that has an ``append``
210 method. Custom object types used with the email package (for example,
211 custom ``Message`` objects) should also provide such an attribute,
212 otherwise defects in parsed messages will raise unexpected errors.
R David Murray3edd22a2011-04-18 13:59:37 -0400213
R David Murrayabfc3742012-05-29 09:14:44 -0400214 .. method:: header_max_count(name)
215
216 Return the maximum allowed number of headers named *name*.
217
218 Called when a header is added to a :class:`~email.message.Message`
219 object. If the returned value is not ``0`` or ``None``, and there are
220 already a number of headers with the name *name* equal to the value
221 returned, a :exc:`ValueError` is raised.
222
223 Because the default behavior of ``Message.__setitem__`` is to append the
224 value to the list of headers, it is easy to create duplicate headers
225 without realizing it. This method allows certain headers to be limited
226 in the number of instances of that header that may be added to a
227 ``Message`` programmatically. (The limit is not observed by the parser,
228 which will faithfully produce as many headers as exist in the message
229 being parsed.)
230
231 The default implementation returns ``None`` for all header names.
232
R David Murrayc27e5222012-05-25 15:01:48 -0400233 .. method:: header_source_parse(sourcelines)
R David Murray3edd22a2011-04-18 13:59:37 -0400234
R David Murrayc27e5222012-05-25 15:01:48 -0400235 The email package calls this method with a list of strings, each string
236 ending with the line separation characters found in the source being
237 parsed. The first line includes the field header name and separator.
238 All whitespace in the source is preserved. The method should return the
239 ``(name, value)`` tuple that is to be stored in the ``Message`` to
240 represent the parsed header.
R David Murray3edd22a2011-04-18 13:59:37 -0400241
R David Murrayc27e5222012-05-25 15:01:48 -0400242 If an implementation wishes to retain compatibility with the existing
243 email package policies, *name* should be the case preserved name (all
244 characters up to the '``:``' separator), while *value* should be the
245 unfolded value (all line separator characters removed, but whitespace
246 kept intact), stripped of leading whitespace.
R David Murray3edd22a2011-04-18 13:59:37 -0400247
R David Murrayc27e5222012-05-25 15:01:48 -0400248 *sourcelines* may contain surrogateescaped binary data.
249
250 There is no default implementation
251
252 .. method:: header_store_parse(name, value)
253
254 The email package calls this method with the name and value provided by
255 the application program when the application program is modifying a
256 ``Message`` programmatically (as opposed to a ``Message`` created by a
257 parser). The method should return the ``(name, value)`` tuple that is to
258 be stored in the ``Message`` to represent the header.
259
260 If an implementation wishes to retain compatibility with the existing
261 email package policies, the *name* and *value* should be strings or
262 string subclasses that do not change the content of the passed in
263 arguments.
264
265 There is no default implementation
266
267 .. method:: header_fetch_parse(name, value)
268
269 The email package calls this method with the *name* and *value* currently
270 stored in the ``Message`` when that header is requested by the
271 application program, and whatever the method returns is what is passed
272 back to the application as the value of the header being retrieved.
273 Note that there may be more than one header with the same name stored in
274 the ``Message``; the method is passed the specific name and value of the
275 header destined to be returned to the application.
276
277 *value* may contain surrogateescaped binary data. There should be no
278 surrogateescaped binary data in the value returned by the method.
279
280 There is no default implementation
281
282 .. method:: fold(name, value)
283
284 The email package calls this method with the *name* and *value* currently
285 stored in the ``Message`` for a given header. The method should return a
286 string that represents that header "folded" correctly (according to the
287 policy settings) by composing the *name* with the *value* and inserting
288 :attr:`linesep` characters at the appropriate places. See :rfc:`5322`
289 for a discussion of the rules for folding email headers.
290
291 *value* may contain surrogateescaped binary data. There should be no
292 surrogateescaped binary data in the string returned by the method.
293
294 .. method:: fold_binary(name, value)
295
296 The same as :meth:`fold`, except that the returned value should be a
297 bytes object rather than a string.
298
299 *value* may contain surrogateescaped binary data. These could be
300 converted back into binary data in the returned bytes object.
301
302
303.. class:: Compat32(**kw)
304
305 This concrete :class:`Policy` is the backward compatibility policy. It
306 replicates the behavior of the email package in Python 3.2. The
Serhiy Storchakae0f0cf42013-08-19 09:59:18 +0300307 :mod:`~email.policy` module also defines an instance of this class,
R David Murrayc27e5222012-05-25 15:01:48 -0400308 :const:`compat32`, that is used as the default policy. Thus the default
309 behavior of the email package is to maintain compatibility with Python 3.2.
310
311 The class provides the following concrete implementations of the
312 abstract methods of :class:`Policy`:
313
314 .. method:: header_source_parse(sourcelines)
315
316 The name is parsed as everything up to the '``:``' and returned
317 unmodified. The value is determined by stripping leading whitespace off
318 the remainder of the first line, joining all subsequent lines together,
319 and stripping any trailing carriage return or linefeed characters.
320
321 .. method:: header_store_parse(name, value)
322
323 The name and value are returned unmodified.
324
325 .. method:: header_fetch_parse(name, value)
326
327 If the value contains binary data, it is converted into a
328 :class:`~email.header.Header` object using the ``unknown-8bit`` charset.
329 Otherwise it is returned unmodified.
330
331 .. method:: fold(name, value)
332
333 Headers are folded using the :class:`~email.header.Header` folding
334 algorithm, which preserves existing line breaks in the value, and wraps
335 each resulting line to the ``max_line_length``. Non-ASCII binary data are
336 CTE encoded using the ``unknown-8bit`` charset.
337
338 .. method:: fold_binary(name, value)
339
340 Headers are folded using the :class:`~email.header.Header` folding
341 algorithm, which preserves existing line breaks in the value, and wraps
342 each resulting line to the ``max_line_length``. If ``cte_type`` is
343 ``7bit``, non-ascii binary data is CTE encoded using the ``unknown-8bit``
344 charset. Otherwise the original source header is used, with its existing
Terry Jan Reedy0f847642013-03-11 18:34:00 -0400345 line breaks and any (RFC invalid) binary data it may contain.
R David Murray0b6f6c82012-05-25 18:42:14 -0400346
347
348.. note::
349
R David Murrayea976682012-05-27 15:03:38 -0400350 The documentation below describes new policies that are included in the
351 standard library on a :term:`provisional basis <provisional package>`.
352 Backwards incompatible changes (up to and including removal of the feature)
353 may occur if deemed necessary by the core developers.
R David Murray0b6f6c82012-05-25 18:42:14 -0400354
355
356.. class:: EmailPolicy(**kw)
357
358 This concrete :class:`Policy` provides behavior that is intended to be fully
359 compliant with the current email RFCs. These include (but are not limited
360 to) :rfc:`5322`, :rfc:`2047`, and the current MIME RFCs.
361
362 This policy adds new header parsing and folding algorithms. Instead of
363 simple strings, headers are custom objects with custom attributes depending
364 on the type of the field. The parsing and folding algorithm fully implement
365 :rfc:`2047` and :rfc:`5322`.
366
367 In addition to the settable attributes listed above that apply to all
368 policies, this policy adds the following additional attributes:
369
370 .. attribute:: refold_source
371
372 If the value for a header in the ``Message`` object originated from a
373 :mod:`~email.parser` (as opposed to being set by a program), this
374 attribute indicates whether or not a generator should refold that value
375 when transforming the message back into stream form. The possible values
376 are:
377
378 ======== ===============================================================
379 ``none`` all source values use original folding
380
381 ``long`` source values that have any line that is longer than
382 ``max_line_length`` will be refolded
383
384 ``all`` all values are refolded.
385 ======== ===============================================================
386
387 The default is ``long``.
388
389 .. attribute:: header_factory
390
391 A callable that takes two arguments, ``name`` and ``value``, where
392 ``name`` is a header field name and ``value`` is an unfolded header field
R David Murrayea976682012-05-27 15:03:38 -0400393 value, and returns a string subclass that represents that header. A
394 default ``header_factory`` (see :mod:`~email.headerregistry`) is provided
395 that understands some of the :RFC:`5322` header field types. (Currently
396 address fields and date fields have special treatment, while all other
397 fields are treated as unstructured. This list will be completed before
398 the extension is marked stable.)
R David Murray0b6f6c82012-05-25 18:42:14 -0400399
400 The class provides the following concrete implementations of the abstract
401 methods of :class:`Policy`:
402
R David Murrayabfc3742012-05-29 09:14:44 -0400403 .. method:: header_max_count(name)
404
405 Returns the value of the
406 :attr:`~email.headerregistry.BaseHeader.max_count` attribute of the
407 specialized class used to represent the header with the given name.
408
R David Murray0b6f6c82012-05-25 18:42:14 -0400409 .. method:: header_source_parse(sourcelines)
410
411 The implementation of this method is the same as that for the
412 :class:`Compat32` policy.
413
414 .. method:: header_store_parse(name, value)
415
416 The name is returned unchanged. If the input value has a ``name``
417 attribute and it matches *name* ignoring case, the value is returned
418 unchanged. Otherwise the *name* and *value* are passed to
419 ``header_factory``, and the resulting custom header object is returned as
420 the value. In this case a ``ValueError`` is raised if the input value
421 contains CR or LF characters.
422
423 .. method:: header_fetch_parse(name, value)
424
425 If the value has a ``name`` attribute, it is returned to unmodified.
426 Otherwise the *name*, and the *value* with any CR or LF characters
427 removed, are passed to the ``header_factory``, and the resulting custom
428 header object is returned. Any surrogateescaped bytes get turned into
429 the unicode unknown-character glyph.
430
431 .. method:: fold(name, value)
432
433 Header folding is controlled by the :attr:`refold_source` policy setting.
434 A value is considered to be a 'source value' if and only if it does not
435 have a ``name`` attribute (having a ``name`` attribute means it is a
436 header object of some sort). If a source value needs to be refolded
437 according to the policy, it is converted into a custom header object by
438 passing the *name* and the *value* with any CR and LF characters removed
439 to the ``header_factory``. Folding of a custom header object is done by
440 calling its ``fold`` method with the current policy.
441
442 Source values are split into lines using :meth:`~str.splitlines`. If
443 the value is not to be refolded, the lines are rejoined using the
444 ``linesep`` from the policy and returned. The exception is lines
445 containing non-ascii binary data. In that case the value is refolded
446 regardless of the ``refold_source`` setting, which causes the binary data
447 to be CTE encoded using the ``unknown-8bit`` charset.
448
449 .. method:: fold_binary(name, value)
450
Serhiy Storchakae0f0cf42013-08-19 09:59:18 +0300451 The same as :meth:`fold` if :attr:`~Policy.cte_type` is ``7bit``, except
452 that the returned value is bytes.
R David Murray0b6f6c82012-05-25 18:42:14 -0400453
Serhiy Storchakae0f0cf42013-08-19 09:59:18 +0300454 If :attr:`~Policy.cte_type` is ``8bit``, non-ASCII binary data is
455 converted back
R David Murray0b6f6c82012-05-25 18:42:14 -0400456 into bytes. Headers with binary data are not refolded, regardless of the
457 ``refold_header`` setting, since there is no way to know whether the
458 binary data consists of single byte characters or multibyte characters.
459
460The following instances of :class:`EmailPolicy` provide defaults suitable for
461specific application domains. Note that in the future the behavior of these
Georg Brandl38e0e1e2012-05-27 09:31:10 +0200462instances (in particular the ``HTTP`` instance) may be adjusted to conform even
R David Murray0b6f6c82012-05-25 18:42:14 -0400463more closely to the RFCs relevant to their domains.
464
465.. data:: default
466
467 An instance of ``EmailPolicy`` with all defaults unchanged. This policy
468 uses the standard Python ``\n`` line endings rather than the RFC-correct
469 ``\r\n``.
470
471.. data:: SMTP
472
473 Suitable for serializing messages in conformance with the email RFCs.
474 Like ``default``, but with ``linesep`` set to ``\r\n``, which is RFC
475 compliant.
476
477.. data:: HTTP
478
479 Suitable for serializing headers with for use in HTTP traffic. Like
480 ``SMTP`` except that ``max_line_length`` is set to ``None`` (unlimited).
481
482.. data:: strict
483
484 Convenience instance. The same as ``default`` except that
485 ``raise_on_defect`` is set to ``True``. This allows any policy to be made
486 strict by writing::
487
488 somepolicy + policy.strict
489
490With all of these :class:`EmailPolicies <.EmailPolicy>`, the effective API of
491the email package is changed from the Python 3.2 API in the following ways:
492
493 * Setting a header on a :class:`~email.message.Message` results in that
494 header being parsed and a custom header object created.
495
496 * Fetching a header value from a :class:`~email.message.Message` results
497 in that header being parsed and a custom header object created and
498 returned.
499
500 * Any custom header object, or any header that is refolded due to the
501 policy settings, is folded using an algorithm that fully implements the
502 RFC folding algorithms, including knowing where encoded words are required
503 and allowed.
504
505From the application view, this means that any header obtained through the
506:class:`~email.message.Message` is a custom header object with custom
507attributes, whose string value is the fully decoded unicode value of the
508header. Likewise, a header may be assigned a new value, or a new header
509created, using a unicode string, and the policy will take care of converting
510the unicode string into the correct RFC encoded form.
511
R David Murrayea976682012-05-27 15:03:38 -0400512The custom header objects and their attributes are described in
513:mod:`~email.headerregistry`.