• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`email.message`: Representing an email message
2---------------------------------------------------
3
4.. module:: email.message
5   :synopsis: The base class representing email messages.
6.. moduleauthor:: R. David Murray <rdmurray@bitdance.com>
7.. sectionauthor:: R. David Murray <rdmurray@bitdance.com>,
8                   Barry A. Warsaw <barry@python.org>
9
10**Source code:** :source:`Lib/email/message.py`
11
12--------------
13
14.. versionadded:: 3.6 [1]_
15
16The central class in the :mod:`email` package is the :class:`EmailMessage`
17class, imported from the :mod:`email.message` module.  It is the base class for
18the :mod:`email` object model.  :class:`EmailMessage` provides the core
19functionality for setting and querying header fields, for accessing message
20bodies, and for creating or modifying structured messages.
21
22An email message consists of *headers* and a *payload* (which is also referred
23to as the *content*).  Headers are :rfc:`5322` or :rfc:`6532` style field names
24and values, where the field name and value are separated by a colon.  The colon
25is not part of either the field name or the field value.  The payload may be a
26simple text message, or a binary object, or a structured sequence of
27sub-messages each with their own set of headers and their own payload.  The
28latter type of payload is indicated by the message having a MIME type such as
29:mimetype:`multipart/\*` or :mimetype:`message/rfc822`.
30
31The conceptual model provided by an :class:`EmailMessage` object is that of an
32ordered dictionary of headers coupled with a *payload* that represents the
33:rfc:`5322` body of the message, which might be a list of sub-``EmailMessage``
34objects.  In addition to the normal dictionary methods for accessing the header
35names and values, there are methods for accessing specialized information from
36the headers (for example the MIME content type), for operating on the payload,
37for generating a serialized version of the message, and for recursively walking
38over the object tree.
39
40The :class:`EmailMessage` dictionary-like interface is indexed by the header
41names, which must be ASCII values.  The values of the dictionary are strings
42with some extra methods.  Headers are stored and returned in case-preserving
43form, but field names are matched case-insensitively.  Unlike a real dict,
44there is an ordering to the keys, and there can be duplicate keys.  Additional
45methods are provided for working with headers that have duplicate keys.
46
47The *payload* is either a string or bytes object, in the case of simple message
48objects, or a list of :class:`EmailMessage` objects, for MIME container
49documents such as :mimetype:`multipart/\*` and :mimetype:`message/rfc822`
50message objects.
51
52
53.. class:: EmailMessage(policy=default)
54
55   If *policy* is specified use the rules it specifies to update and serialize
56   the representation of the message.  If *policy* is not set, use the
57   :class:`~email.policy.default` policy, which follows the rules of the email
58   RFCs except for line endings (instead of the RFC mandated ``\r\n``, it uses
59   the Python standard ``\n`` line endings).  For more information see the
60   :mod:`~email.policy` documentation.
61
62   .. method:: as_string(unixfrom=False, maxheaderlen=None, policy=None)
63
64      Return the entire message flattened as a string.  When optional
65      *unixfrom* is true, the envelope header is included in the returned
66      string.  *unixfrom* defaults to ``False``.  For backward compatibility
67      with the base :class:`~email.message.Message` class *maxheaderlen* is
68      accepted, but defaults to ``None``, which means that by default the line
69      length is controlled by the
70      :attr:`~email.policy.EmailPolicy.max_line_length` of the policy.  The
71      *policy* argument may be used to override the default policy obtained
72      from the message instance.  This can be used to control some of the
73      formatting produced by the method, since the specified *policy* will be
74      passed to the :class:`~email.generator.Generator`.
75
76      Flattening the message may trigger changes to the :class:`EmailMessage`
77      if defaults need to be filled in to complete the transformation to a
78      string (for example, MIME boundaries may be generated or modified).
79
80      Note that this method is provided as a convenience and may not be the
81      most useful way to serialize messages in your application, especially if
82      you are dealing with multiple messages.  See
83      :class:`email.generator.Generator` for a more flexible API for
84      serializing messages.  Note also that this method is restricted to
85      producing messages serialized as "7 bit clean" when
86      :attr:`~email.policy.EmailPolicy.utf8` is ``False``, which is the default.
87
88      .. versionchanged:: 3.6 the default behavior when *maxheaderlen*
89         is not specified was changed from defaulting to 0 to defaulting
90         to the value of *max_line_length* from the policy.
91
92
93   .. method:: __str__()
94
95      Equivalent to ``as_string(policy=self.policy.clone(utf8=True))``.  Allows
96      ``str(msg)`` to produce a string containing the serialized message in a
97      readable format.
98
99      .. versionchanged:: 3.4 the method was changed to use ``utf8=True``,
100         thus producing an :rfc:`6531`-like message representation, instead of
101         being a direct alias for :meth:`as_string`.
102
103
104   .. method:: as_bytes(unixfrom=False, policy=None)
105
106      Return the entire message flattened as a bytes object.  When optional
107      *unixfrom* is true, the envelope header is included in the returned
108      string.  *unixfrom* defaults to ``False``.  The *policy* argument may be
109      used to override the default policy obtained from the message instance.
110      This can be used to control some of the formatting produced by the
111      method, since the specified *policy* will be passed to the
112      :class:`~email.generator.BytesGenerator`.
113
114      Flattening the message may trigger changes to the :class:`EmailMessage`
115      if defaults need to be filled in to complete the transformation to a
116      string (for example, MIME boundaries may be generated or modified).
117
118      Note that this method is provided as a convenience and may not be the
119      most useful way to serialize messages in your application, especially if
120      you are dealing with multiple messages.  See
121      :class:`email.generator.BytesGenerator` for a more flexible API for
122      serializing messages.
123
124
125   .. method:: __bytes__()
126
127      Equivalent to :meth:`.as_bytes()`.  Allows ``bytes(msg)`` to produce a
128      bytes object containing the serialized message.
129
130
131   .. method:: is_multipart()
132
133      Return ``True`` if the message's payload is a list of
134      sub-\ :class:`EmailMessage` objects, otherwise return ``False``.  When
135      :meth:`is_multipart` returns ``False``, the payload should be a string
136      object (which might be a CTE encoded binary payload).  Note that
137      :meth:`is_multipart` returning ``True`` does not necessarily mean that
138      "msg.get_content_maintype() == 'multipart'" will return the ``True``.
139      For example, ``is_multipart`` will return ``True`` when the
140      :class:`EmailMessage` is of type ``message/rfc822``.
141
142
143   .. method:: set_unixfrom(unixfrom)
144
145      Set the message's envelope header to *unixfrom*, which should be a
146      string.  (See :class:`~mailbox.mboxMessage` for a brief description of
147      this header.)
148
149
150   .. method:: get_unixfrom()
151
152      Return the message's envelope header.  Defaults to ``None`` if the
153      envelope header was never set.
154
155
156   The following methods implement the mapping-like interface for accessing the
157   message's headers.  Note that there are some semantic differences
158   between these methods and a normal mapping (i.e. dictionary) interface.  For
159   example, in a dictionary there are no duplicate keys, but here there may be
160   duplicate message headers.  Also, in dictionaries there is no guaranteed
161   order to the keys returned by :meth:`keys`, but in an :class:`EmailMessage`
162   object, headers are always returned in the order they appeared in the
163   original message, or in which they were added to the message later.  Any
164   header deleted and then re-added is always appended to the end of the
165   header list.
166
167   These semantic differences are intentional and are biased toward
168   convenience in the most common use cases.
169
170   Note that in all cases, any envelope header present in the message is not
171   included in the mapping interface.
172
173
174   .. method:: __len__()
175
176      Return the total number of headers, including duplicates.
177
178
179   .. method:: __contains__(name)
180
181      Return ``True`` if the message object has a field named *name*. Matching is
182      done without regard to case and *name* does not include the trailing
183      colon.  Used for the ``in`` operator.  For example::
184
185           if 'message-id' in myMessage:
186              print('Message-ID:', myMessage['message-id'])
187
188
189   .. method:: __getitem__(name)
190
191      Return the value of the named header field.  *name* does not include the
192      colon field separator.  If the header is missing, ``None`` is returned; a
193      :exc:`KeyError` is never raised.
194
195      Note that if the named field appears more than once in the message's
196      headers, exactly which of those field values will be returned is
197      undefined.  Use the :meth:`get_all` method to get the values of all the
198      extant headers named *name*.
199
200      Using the standard (non-``compat32``) policies, the returned value is an
201      instance of a subclass of :class:`email.headerregistry.BaseHeader`.
202
203
204   .. method:: __setitem__(name, val)
205
206      Add a header to the message with field name *name* and value *val*.  The
207      field is appended to the end of the message's existing headers.
208
209      Note that this does *not* overwrite or delete any existing header with the same
210      name.  If you want to ensure that the new header is the only one present in the
211      message with field name *name*, delete the field first, e.g.::
212
213         del msg['subject']
214         msg['subject'] = 'Python roolz!'
215
216      If the :mod:`policy` defines certain headers to be unique (as the standard
217      policies do), this method may raise a :exc:`ValueError` when an attempt
218      is made to assign a value to such a header when one already exists.  This
219      behavior is intentional for consistency's sake, but do not depend on it
220      as we may choose to make such assignments do an automatic deletion of the
221      existing header in the future.
222
223
224   .. method:: __delitem__(name)
225
226      Delete all occurrences of the field with name *name* from the message's
227      headers.  No exception is raised if the named field isn't present in the
228      headers.
229
230
231   .. method:: keys()
232
233      Return a list of all the message's header field names.
234
235
236   .. method:: values()
237
238      Return a list of all the message's field values.
239
240
241   .. method:: items()
242
243      Return a list of 2-tuples containing all the message's field headers and
244      values.
245
246
247   .. method:: get(name, failobj=None)
248
249      Return the value of the named header field.  This is identical to
250      :meth:`__getitem__` except that optional *failobj* is returned if the
251      named header is missing (*failobj* defaults to ``None``).
252
253
254   Here are some additional useful header related methods:
255
256
257   .. method:: get_all(name, failobj=None)
258
259      Return a list of all the values for the field named *name*. If there are
260      no such named headers in the message, *failobj* is returned (defaults to
261      ``None``).
262
263
264   .. method:: add_header(_name, _value, **_params)
265
266      Extended header setting.  This method is similar to :meth:`__setitem__`
267      except that additional header parameters can be provided as keyword
268      arguments.  *_name* is the header field to add and *_value* is the
269      *primary* value for the header.
270
271      For each item in the keyword argument dictionary *_params*, the key is
272      taken as the parameter name, with underscores converted to dashes (since
273      dashes are illegal in Python identifiers).  Normally, the parameter will
274      be added as ``key="value"`` unless the value is ``None``, in which case
275      only the key will be added.
276
277      If the value contains non-ASCII characters, the charset and language may
278      be explicitly controlled by specifying the value as a three tuple in the
279      format ``(CHARSET, LANGUAGE, VALUE)``, where ``CHARSET`` is a string
280      naming the charset to be used to encode the value, ``LANGUAGE`` can
281      usually be set to ``None`` or the empty string (see :rfc:`2231` for other
282      possibilities), and ``VALUE`` is the string value containing non-ASCII
283      code points.  If a three tuple is not passed and the value contains
284      non-ASCII characters, it is automatically encoded in :rfc:`2231` format
285      using a ``CHARSET`` of ``utf-8`` and a ``LANGUAGE`` of ``None``.
286
287      Here is an example::
288
289         msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')
290
291      This will add a header that looks like ::
292
293         Content-Disposition: attachment; filename="bud.gif"
294
295      An example of the extended interface with non-ASCII characters::
296
297         msg.add_header('Content-Disposition', 'attachment',
298                        filename=('iso-8859-1', '', 'Fußballer.ppt'))
299
300
301   .. method:: replace_header(_name, _value)
302
303      Replace a header.  Replace the first header found in the message that
304      matches *_name*, retaining header order and field name case of the
305      original header.  If no matching header is found, raise a
306      :exc:`KeyError`.
307
308
309   .. method:: get_content_type()
310
311      Return the message's content type, coerced to lower case of the form
312      :mimetype:`maintype/subtype`.  If there is no :mailheader:`Content-Type`
313      header in the message return the value returned by
314      :meth:`get_default_type`.  If the :mailheader:`Content-Type` header is
315      invalid, return ``text/plain``.
316
317      (According to :rfc:`2045`, messages always have a default type,
318      :meth:`get_content_type` will always return a value.  :rfc:`2045` defines
319      a message's default type to be :mimetype:`text/plain` unless it appears
320      inside a :mimetype:`multipart/digest` container, in which case it would
321      be :mimetype:`message/rfc822`.  If the :mailheader:`Content-Type` header
322      has an invalid type specification, :rfc:`2045` mandates that the default
323      type be :mimetype:`text/plain`.)
324
325
326   .. method:: get_content_maintype()
327
328      Return the message's main content type.  This is the :mimetype:`maintype`
329      part of the string returned by :meth:`get_content_type`.
330
331
332   .. method:: get_content_subtype()
333
334      Return the message's sub-content type.  This is the :mimetype:`subtype`
335      part of the string returned by :meth:`get_content_type`.
336
337
338   .. method:: get_default_type()
339
340      Return the default content type.  Most messages have a default content
341      type of :mimetype:`text/plain`, except for messages that are subparts of
342      :mimetype:`multipart/digest` containers.  Such subparts have a default
343      content type of :mimetype:`message/rfc822`.
344
345
346   .. method:: set_default_type(ctype)
347
348      Set the default content type.  *ctype* should either be
349      :mimetype:`text/plain` or :mimetype:`message/rfc822`, although this is
350      not enforced.  The default content type is not stored in the
351      :mailheader:`Content-Type` header, so it only affects the return value of
352      the ``get_content_type`` methods when no :mailheader:`Content-Type`
353      header is present in the message.
354
355
356   .. method:: set_param(param, value, header='Content-Type', requote=True, \
357                         charset=None, language='', replace=False)
358
359      Set a parameter in the :mailheader:`Content-Type` header.  If the
360      parameter already exists in the header, replace its value with *value*.
361      When *header* is ``Content-Type`` (the default) and the header does not
362      yet exist in the message, add it, set its value to
363      :mimetype:`text/plain`, and append the new parameter value.  Optional
364      *header* specifies an alternative header to :mailheader:`Content-Type`.
365
366      If the value contains non-ASCII characters, the charset and language may
367      be explicitly specified using the optional *charset* and *language*
368      parameters.  Optional *language* specifies the :rfc:`2231` language,
369      defaulting to the empty string.  Both *charset* and *language* should be
370      strings.  The default is to use the ``utf8`` *charset* and ``None`` for
371      the *language*.
372
373      If *replace* is ``False`` (the default) the header is moved to the
374      end of the list of headers.  If *replace* is ``True``, the header
375      will be updated in place.
376
377      Use of the *requote* parameter with :class:`EmailMessage` objects is
378      deprecated.
379
380      Note that existing parameter values of headers may be accessed through
381      the :attr:`~email.headerregistry.BaseHeader.params` attribute of the
382      header value (for example, ``msg['Content-Type'].params['charset']``).
383
384      .. versionchanged:: 3.4 ``replace`` keyword was added.
385
386
387   .. method:: del_param(param, header='content-type', requote=True)
388
389      Remove the given parameter completely from the :mailheader:`Content-Type`
390      header.  The header will be re-written in place without the parameter or
391      its value.  Optional *header* specifies an alternative to
392      :mailheader:`Content-Type`.
393
394      Use of the *requote* parameter with :class:`EmailMessage` objects is
395      deprecated.
396
397
398   .. method:: get_filename(failobj=None)
399
400      Return the value of the ``filename`` parameter of the
401      :mailheader:`Content-Disposition` header of the message.  If the header
402      does not have a ``filename`` parameter, this method falls back to looking
403      for the ``name`` parameter on the :mailheader:`Content-Type` header.  If
404      neither is found, or the header is missing, then *failobj* is returned.
405      The returned string will always be unquoted as per
406      :func:`email.utils.unquote`.
407
408
409   .. method:: get_boundary(failobj=None)
410
411      Return the value of the ``boundary`` parameter of the
412      :mailheader:`Content-Type` header of the message, or *failobj* if either
413      the header is missing, or has no ``boundary`` parameter.  The returned
414      string will always be unquoted as per :func:`email.utils.unquote`.
415
416
417   .. method:: set_boundary(boundary)
418
419      Set the ``boundary`` parameter of the :mailheader:`Content-Type` header to
420      *boundary*.  :meth:`set_boundary` will always quote *boundary* if
421      necessary.  A :exc:`~email.errors.HeaderParseError` is raised if the
422      message object has no :mailheader:`Content-Type` header.
423
424      Note that using this method is subtly different from deleting the old
425      :mailheader:`Content-Type` header and adding a new one with the new
426      boundary via :meth:`add_header`, because :meth:`set_boundary` preserves
427      the order of the :mailheader:`Content-Type` header in the list of
428      headers.
429
430
431   .. method:: get_content_charset(failobj=None)
432
433      Return the ``charset`` parameter of the :mailheader:`Content-Type` header,
434      coerced to lower case.  If there is no :mailheader:`Content-Type` header, or if
435      that header has no ``charset`` parameter, *failobj* is returned.
436
437
438   .. method:: get_charsets(failobj=None)
439
440      Return a list containing the character set names in the message.  If the
441      message is a :mimetype:`multipart`, then the list will contain one element
442      for each subpart in the payload, otherwise, it will be a list of length 1.
443
444      Each item in the list will be a string which is the value of the
445      ``charset`` parameter in the :mailheader:`Content-Type` header for the
446      represented subpart.  If the subpart has no :mailheader:`Content-Type`
447      header, no ``charset`` parameter, or is not of the :mimetype:`text` main
448      MIME type, then that item in the returned list will be *failobj*.
449
450
451   .. method:: is_attachment
452
453      Return ``True`` if there is a :mailheader:`Content-Disposition` header
454      and its (case insensitive) value is ``attachment``, ``False`` otherwise.
455
456      .. versionchanged:: 3.4.2
457         is_attachment is now a method instead of a property, for consistency
458         with :meth:`~email.message.Message.is_multipart`.
459
460
461   .. method:: get_content_disposition()
462
463      Return the lowercased value (without parameters) of the message's
464      :mailheader:`Content-Disposition` header if it has one, or ``None``.  The
465      possible values for this method are *inline*, *attachment* or ``None``
466      if the message follows :rfc:`2183`.
467
468      .. versionadded:: 3.5
469
470
471   The following methods relate to interrogating and manipulating the content
472   (payload) of the message.
473
474
475   .. method:: walk()
476
477      The :meth:`walk` method is an all-purpose generator which can be used to
478      iterate over all the parts and subparts of a message object tree, in
479      depth-first traversal order.  You will typically use :meth:`walk` as the
480      iterator in a ``for`` loop; each iteration returns the next subpart.
481
482      Here's an example that prints the MIME type of every part of a multipart
483      message structure:
484
485      .. testsetup::
486
487         from email import message_from_binary_file
488         with open('../Lib/test/test_email/data/msg_16.txt', 'rb') as f:
489             msg = message_from_binary_file(f)
490
491      .. doctest::
492
493         >>> for part in msg.walk():
494         ...     print(part.get_content_type())
495         multipart/report
496         text/plain
497         message/delivery-status
498         text/plain
499         text/plain
500         message/rfc822
501         text/plain
502
503      ``walk`` iterates over the subparts of any part where
504      :meth:`is_multipart` returns ``True``, even though
505      ``msg.get_content_maintype() == 'multipart'`` may return ``False``.  We
506      can see this in our example by making use of the ``_structure`` debug
507      helper function:
508
509      .. doctest::
510
511         >>> from email.iterators import _structure
512         >>> for part in msg.walk():
513         ...     print(part.get_content_maintype() == 'multipart',
514         ...           part.is_multipart())
515         True True
516         False False
517         False True
518         False False
519         False False
520         False True
521         False False
522         >>> _structure(msg)
523         multipart/report
524             text/plain
525             message/delivery-status
526                 text/plain
527                 text/plain
528             message/rfc822
529                 text/plain
530
531      Here the ``message`` parts are not ``multiparts``, but they do contain
532      subparts. ``is_multipart()`` returns ``True`` and ``walk`` descends
533      into the subparts.
534
535
536   .. method:: get_body(preferencelist=('related', 'html', 'plain'))
537
538      Return the MIME part that is the best candidate to be the "body" of the
539      message.
540
541      *preferencelist* must be a sequence of strings from the set ``related``,
542      ``html``, and ``plain``, and indicates the order of preference for the
543      content type of the part returned.
544
545      Start looking for candidate matches with the object on which the
546      ``get_body`` method is called.
547
548      If ``related`` is not included in *preferencelist*, consider the root
549      part (or subpart of the root part) of any related encountered as a
550      candidate if the (sub-)part matches a preference.
551
552      When encountering a ``multipart/related``, check the ``start`` parameter
553      and if a part with a matching :mailheader:`Content-ID` is found, consider
554      only it when looking for candidate matches.  Otherwise consider only the
555      first (default root) part of the ``multipart/related``.
556
557      If a part has a :mailheader:`Content-Disposition` header, only consider
558      the part a candidate match if the value of the header is ``inline``.
559
560      If none of the candidates matches any of the preferences in
561      *preferencelist*, return ``None``.
562
563      Notes: (1) For most applications the only *preferencelist* combinations
564      that really make sense are ``('plain',)``, ``('html', 'plain')``, and the
565      default ``('related', 'html', 'plain')``.  (2) Because matching starts
566      with the object on which ``get_body`` is called, calling ``get_body`` on
567      a ``multipart/related`` will return the object itself unless
568      *preferencelist* has a non-default value. (3) Messages (or message parts)
569      that do not specify a :mailheader:`Content-Type` or whose
570      :mailheader:`Content-Type` header is invalid will be treated as if they
571      are of type ``text/plain``, which may occasionally cause ``get_body`` to
572      return unexpected results.
573
574
575   .. method:: iter_attachments()
576
577      Return an iterator over all of the immediate sub-parts of the message
578      that are not candidate "body" parts.  That is, skip the first occurrence
579      of each of ``text/plain``, ``text/html``, ``multipart/related``, or
580      ``multipart/alternative`` (unless they are explicitly marked as
581      attachments via :mailheader:`Content-Disposition: attachment`), and
582      return all remaining parts.  When applied directly to a
583      ``multipart/related``, return an iterator over the all the related parts
584      except the root part (ie: the part pointed to by the ``start`` parameter,
585      or the first part if there is no ``start`` parameter or the ``start``
586      parameter doesn't match the :mailheader:`Content-ID` of any of the
587      parts).  When applied directly to a ``multipart/alternative`` or a
588      non-``multipart``, return an empty iterator.
589
590
591   .. method:: iter_parts()
592
593      Return an iterator over all of the immediate sub-parts of the message,
594      which will be empty for a non-``multipart``.  (See also
595      :meth:`~email.message.EmailMessage.walk`.)
596
597
598   .. method:: get_content(*args, content_manager=None, **kw)
599
600      Call the :meth:`~email.contentmanager.ContentManager.get_content` method
601      of the *content_manager*, passing self as the message object, and passing
602      along any other arguments or keywords as additional arguments.  If
603      *content_manager* is not specified, use the ``content_manager`` specified
604      by the current :mod:`~email.policy`.
605
606
607   .. method:: set_content(*args, content_manager=None, **kw)
608
609      Call the :meth:`~email.contentmanager.ContentManager.set_content` method
610      of the *content_manager*, passing self as the message object, and passing
611      along any other arguments or keywords as additional arguments.  If
612      *content_manager* is not specified, use the ``content_manager`` specified
613      by the current :mod:`~email.policy`.
614
615
616   .. method:: make_related(boundary=None)
617
618      Convert a non-``multipart`` message into a ``multipart/related`` message,
619      moving any existing :mailheader:`Content-` headers and payload into a
620      (new) first part of the ``multipart``.  If *boundary* is specified, use
621      it as the boundary string in the multipart, otherwise leave the boundary
622      to be automatically created when it is needed (for example, when the
623      message is serialized).
624
625
626   .. method:: make_alternative(boundary=None)
627
628      Convert a non-``multipart`` or a ``multipart/related`` into a
629      ``multipart/alternative``, moving any existing :mailheader:`Content-`
630      headers and payload into a (new) first part of the ``multipart``.  If
631      *boundary* is specified, use it as the boundary string in the multipart,
632      otherwise leave the boundary to be automatically created when it is
633      needed (for example, when the message is serialized).
634
635
636   .. method:: make_mixed(boundary=None)
637
638      Convert a non-``multipart``, a ``multipart/related``, or a
639      ``multipart-alternative`` into a ``multipart/mixed``, moving any existing
640      :mailheader:`Content-` headers and payload into a (new) first part of the
641      ``multipart``.  If *boundary* is specified, use it as the boundary string
642      in the multipart, otherwise leave the boundary to be automatically
643      created when it is needed (for example, when the message is serialized).
644
645
646   .. method:: add_related(*args, content_manager=None, **kw)
647
648      If the message is a ``multipart/related``, create a new message
649      object, pass all of the arguments to its :meth:`set_content` method,
650      and :meth:`~email.message.Message.attach` it to the ``multipart``.  If
651      the message is a non-``multipart``, call :meth:`make_related` and then
652      proceed as above.  If the message is any other type of ``multipart``,
653      raise a :exc:`TypeError`. If *content_manager* is not specified, use
654      the ``content_manager`` specified by the current :mod:`~email.policy`.
655      If the added part has no :mailheader:`Content-Disposition` header,
656      add one with the value ``inline``.
657
658
659   .. method:: add_alternative(*args, content_manager=None, **kw)
660
661      If the message is a ``multipart/alternative``, create a new message
662      object, pass all of the arguments to its :meth:`set_content` method, and
663      :meth:`~email.message.Message.attach` it to the ``multipart``.  If the
664      message is a non-``multipart`` or ``multipart/related``, call
665      :meth:`make_alternative` and then proceed as above.  If the message is
666      any other type of ``multipart``, raise a :exc:`TypeError`. If
667      *content_manager* is not specified, use the ``content_manager`` specified
668      by the current :mod:`~email.policy`.
669
670
671   .. method:: add_attachment(*args, content_manager=None, **kw)
672
673      If the message is a ``multipart/mixed``, create a new message object,
674      pass all of the arguments to its :meth:`set_content` method, and
675      :meth:`~email.message.Message.attach` it to the ``multipart``.  If the
676      message is a non-``multipart``, ``multipart/related``, or
677      ``multipart/alternative``, call :meth:`make_mixed` and then proceed as
678      above. If *content_manager* is not specified, use the ``content_manager``
679      specified by the current :mod:`~email.policy`.  If the added part
680      has no :mailheader:`Content-Disposition` header, add one with the value
681      ``attachment``.  This method can be used both for explicit attachments
682      (:mailheader:`Content-Disposition: attachment`) and ``inline`` attachments
683      (:mailheader:`Content-Disposition: inline`), by passing appropriate
684      options to the ``content_manager``.
685
686
687   .. method:: clear()
688
689      Remove the payload and all of the headers.
690
691
692   .. method:: clear_content()
693
694      Remove the payload and all of the :exc:`Content-` headers, leaving
695      all other headers intact and in their original order.
696
697
698   :class:`EmailMessage` objects have the following instance attributes:
699
700
701   .. attribute:: preamble
702
703      The format of a MIME document allows for some text between the blank line
704      following the headers, and the first multipart boundary string. Normally,
705      this text is never visible in a MIME-aware mail reader because it falls
706      outside the standard MIME armor.  However, when viewing the raw text of
707      the message, or when viewing the message in a non-MIME aware reader, this
708      text can become visible.
709
710      The *preamble* attribute contains this leading extra-armor text for MIME
711      documents.  When the :class:`~email.parser.Parser` discovers some text
712      after the headers but before the first boundary string, it assigns this
713      text to the message's *preamble* attribute.  When the
714      :class:`~email.generator.Generator` is writing out the plain text
715      representation of a MIME message, and it finds the
716      message has a *preamble* attribute, it will write this text in the area
717      between the headers and the first boundary.  See :mod:`email.parser` and
718      :mod:`email.generator` for details.
719
720      Note that if the message object has no preamble, the *preamble* attribute
721      will be ``None``.
722
723
724   .. attribute:: epilogue
725
726      The *epilogue* attribute acts the same way as the *preamble* attribute,
727      except that it contains text that appears between the last boundary and
728      the end of the message.  As with the :attr:`~EmailMessage.preamble`,
729      if there is no epilog text this attribute will be ``None``.
730
731
732   .. attribute:: defects
733
734      The *defects* attribute contains a list of all the problems found when
735      parsing this message.  See :mod:`email.errors` for a detailed description
736      of the possible parsing defects.
737
738
739.. class:: MIMEPart(policy=default)
740
741    This class represents a subpart of a MIME message.  It is identical to
742    :class:`EmailMessage`, except that no :mailheader:`MIME-Version` headers are
743    added when :meth:`~EmailMessage.set_content` is called, since sub-parts do
744    not need their own :mailheader:`MIME-Version` headers.
745
746
747.. rubric:: Footnotes
748
749.. [1] Originally added in 3.4 as a :term:`provisional module <provisional
750       package>`.  Docs for legacy message class moved to
751       :ref:`compat32_message`.
752