blob: 576531d0475c794de27d7c1725f82bc4959568c3 [file] [log] [blame]
R David Murray79cf3ba2012-05-27 17:10:36 -04001:mod:`email.message`: Representing an email message
2---------------------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +00003
4.. module:: email.message
5 :synopsis: The base class representing email messages.
6
7
8The central class in the :mod:`email` package is the :class:`Message` class,
9imported from the :mod:`email.message` module. It is the base class for the
10:mod:`email` object model. :class:`Message` provides the core functionality for
11setting and querying header fields, and for accessing message bodies.
12
13Conceptually, a :class:`Message` object consists of *headers* and *payloads*.
14Headers are :rfc:`2822` style field names and values where the field name and
15value are separated by a colon. The colon is not part of either the field name
16or the field value.
17
18Headers are stored and returned in case-preserving form but are matched
19case-insensitively. There may also be a single envelope header, also known as
20the *Unix-From* header or the ``From_`` header. The payload is either a string
21in the case of simple message objects or a list of :class:`Message` objects for
22MIME container documents (e.g. :mimetype:`multipart/\*` and
23:mimetype:`message/rfc822`).
24
25:class:`Message` objects provide a mapping style interface for accessing the
26message headers, and an explicit interface for accessing both the headers and
27the payload. It provides convenience methods for generating a flat text
28representation of the message object tree, for accessing commonly used header
29parameters, and for recursively walking over the object tree.
30
31Here are the methods of the :class:`Message` class:
32
33
R David Murrayfb1a7bc2013-08-09 16:17:00 -040034.. class:: Message(policy=compat32)
Georg Brandl116aa622007-08-15 14:28:22 +000035
R David Murrayfb1a7bc2013-08-09 16:17:00 -040036 The *policy* argument determiens the :mod:`~email.policy` that will be used
37 to update the message model. The default value, :class:`compat32
38 <email.policy.Compat32>` maintains backward compatibility with the
39 Python 3.2 version of the email package. For more information see the
40 :mod:`~email.policy` documentation.
41
42 .. versionchanged:: 3.3 The *policy* keyword argument was added.
Georg Brandl116aa622007-08-15 14:28:22 +000043
44
Georg Brandl3f076d82009-05-17 11:28:33 +000045 .. method:: as_string(unixfrom=False, maxheaderlen=0)
Georg Brandl116aa622007-08-15 14:28:22 +000046
Benjamin Petersone41251e2008-04-25 01:59:09 +000047 Return the entire message flattened as a string. When optional *unixfrom*
48 is ``True``, the envelope header is included in the returned string.
R. David Murray101f2782010-01-10 19:18:27 +000049 *unixfrom* defaults to ``False``. Flattening the message may trigger
50 changes to the :class:`Message` if defaults need to be filled in to
51 complete the transformation to a string (for example, MIME boundaries may
52 be generated or modified).
Georg Brandl116aa622007-08-15 14:28:22 +000053
Benjamin Petersone41251e2008-04-25 01:59:09 +000054 Note that this method is provided as a convenience and may not always
R David Murray7dedcb42011-03-15 14:01:18 -040055 format the message the way you want. For example, by default it does
56 not do the mangling of lines that begin with ``From`` that is
57 required by the unix mbox format. For more flexibility, instantiate a
Serhiy Storchakae0f0cf42013-08-19 09:59:18 +030058 :class:`~email.generator.Generator` instance and use its
59 :meth:`~email.generator.Generator.flatten` method directly. For example::
Georg Brandl116aa622007-08-15 14:28:22 +000060
Georg Brandl03124942008-06-10 15:50:56 +000061 from io import StringIO
Benjamin Petersone41251e2008-04-25 01:59:09 +000062 from email.generator import Generator
63 fp = StringIO()
R David Murray7dedcb42011-03-15 14:01:18 -040064 g = Generator(fp, mangle_from_=True, maxheaderlen=60)
Benjamin Petersone41251e2008-04-25 01:59:09 +000065 g.flatten(msg)
66 text = fp.getvalue()
Georg Brandl116aa622007-08-15 14:28:22 +000067
68
Benjamin Petersone41251e2008-04-25 01:59:09 +000069 .. method:: __str__()
Georg Brandl116aa622007-08-15 14:28:22 +000070
Benjamin Petersone41251e2008-04-25 01:59:09 +000071 Equivalent to ``as_string(unixfrom=True)``.
Georg Brandl116aa622007-08-15 14:28:22 +000072
73
Benjamin Petersone41251e2008-04-25 01:59:09 +000074 .. method:: is_multipart()
Georg Brandl116aa622007-08-15 14:28:22 +000075
Benjamin Petersone41251e2008-04-25 01:59:09 +000076 Return ``True`` if the message's payload is a list of sub-\
77 :class:`Message` objects, otherwise return ``False``. When
78 :meth:`is_multipart` returns False, the payload should be a string object.
Georg Brandl116aa622007-08-15 14:28:22 +000079
80
Benjamin Petersone41251e2008-04-25 01:59:09 +000081 .. method:: set_unixfrom(unixfrom)
Georg Brandl116aa622007-08-15 14:28:22 +000082
Benjamin Petersone41251e2008-04-25 01:59:09 +000083 Set the message's envelope header to *unixfrom*, which should be a string.
Georg Brandl116aa622007-08-15 14:28:22 +000084
85
Benjamin Petersone41251e2008-04-25 01:59:09 +000086 .. method:: get_unixfrom()
Georg Brandl116aa622007-08-15 14:28:22 +000087
Benjamin Petersone41251e2008-04-25 01:59:09 +000088 Return the message's envelope header. Defaults to ``None`` if the
89 envelope header was never set.
Georg Brandl116aa622007-08-15 14:28:22 +000090
91
Benjamin Petersone41251e2008-04-25 01:59:09 +000092 .. method:: attach(payload)
Georg Brandl116aa622007-08-15 14:28:22 +000093
Benjamin Petersone41251e2008-04-25 01:59:09 +000094 Add the given *payload* to the current payload, which must be ``None`` or
95 a list of :class:`Message` objects before the call. After the call, the
96 payload will always be a list of :class:`Message` objects. If you want to
97 set the payload to a scalar object (e.g. a string), use
98 :meth:`set_payload` instead.
Georg Brandl116aa622007-08-15 14:28:22 +000099
100
Georg Brandl3f076d82009-05-17 11:28:33 +0000101 .. method:: get_payload(i=None, decode=False)
Georg Brandl116aa622007-08-15 14:28:22 +0000102
Benjamin Petersond6313712008-07-31 16:23:04 +0000103 Return the current payload, which will be a list of
Benjamin Petersone41251e2008-04-25 01:59:09 +0000104 :class:`Message` objects when :meth:`is_multipart` is ``True``, or a
105 string when :meth:`is_multipart` is ``False``. If the payload is a list
106 and you mutate the list object, you modify the message's payload in place.
Georg Brandl116aa622007-08-15 14:28:22 +0000107
Benjamin Petersone41251e2008-04-25 01:59:09 +0000108 With optional argument *i*, :meth:`get_payload` will return the *i*-th
109 element of the payload, counting from zero, if :meth:`is_multipart` is
110 ``True``. An :exc:`IndexError` will be raised if *i* is less than 0 or
111 greater than or equal to the number of items in the payload. If the
112 payload is a string (i.e. :meth:`is_multipart` is ``False``) and *i* is
113 given, a :exc:`TypeError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000114
Benjamin Petersone41251e2008-04-25 01:59:09 +0000115 Optional *decode* is a flag indicating whether the payload should be
116 decoded or not, according to the :mailheader:`Content-Transfer-Encoding`
117 header. When ``True`` and the message is not a multipart, the payload will
118 be decoded if this header's value is ``quoted-printable`` or ``base64``.
119 If some other encoding is used, or :mailheader:`Content-Transfer-Encoding`
R David Murray80e0aee2012-05-27 21:23:34 -0400120 header is missing, the payload is
R. David Murray96fd54e2010-10-08 15:55:28 +0000121 returned as-is (undecoded). In all cases the returned value is binary
122 data. If the message is a multipart and the *decode* flag is ``True``,
R David Murray80e0aee2012-05-27 21:23:34 -0400123 then ``None`` is returned. If the payload is base64 and it was not
124 perfectly formed (missing padding, characters outside the base64
125 alphabet), then an appropriate defect will be added to the message's
126 defect property (:class:`~email.errors.InvalidBase64PaddingDefect` or
127 :class:`~email.errors.InvalidBase64CharactersDefect`, respectively).
R. David Murray96fd54e2010-10-08 15:55:28 +0000128
129 When *decode* is ``False`` (the default) the body is returned as a string
130 without decoding the :mailheader:`Content-Transfer-Encoding`. However,
131 for a :mailheader:`Content-Transfer-Encoding` of 8bit, an attempt is made
Senthil Kumaran82270452010-10-15 13:29:33 +0000132 to decode the original bytes using the ``charset`` specified by the
133 :mailheader:`Content-Type` header, using the ``replace`` error handler.
134 If no ``charset`` is specified, or if the ``charset`` given is not
135 recognized by the email package, the body is decoded using the default
136 ASCII charset.
Georg Brandl116aa622007-08-15 14:28:22 +0000137
138
Georg Brandl3f076d82009-05-17 11:28:33 +0000139 .. method:: set_payload(payload, charset=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000140
Benjamin Petersone41251e2008-04-25 01:59:09 +0000141 Set the entire message object's payload to *payload*. It is the client's
142 responsibility to ensure the payload invariants. Optional *charset* sets
143 the message's default character set; see :meth:`set_charset` for details.
Georg Brandl116aa622007-08-15 14:28:22 +0000144
Benjamin Petersone41251e2008-04-25 01:59:09 +0000145 .. method:: set_charset(charset)
Georg Brandl116aa622007-08-15 14:28:22 +0000146
Benjamin Petersone41251e2008-04-25 01:59:09 +0000147 Set the character set of the payload to *charset*, which can either be a
Georg Brandl3638e482009-04-27 16:46:17 +0000148 :class:`~email.charset.Charset` instance (see :mod:`email.charset`), a
149 string naming a character set, or ``None``. If it is a string, it will
150 be converted to a :class:`~email.charset.Charset` instance. If *charset*
151 is ``None``, the ``charset`` parameter will be removed from the
R David Murraye3d09ff2011-03-15 17:41:13 -0400152 :mailheader:`Content-Type` header (the message will not be otherwise
153 modified). Anything else will generate a :exc:`TypeError`.
Georg Brandl116aa622007-08-15 14:28:22 +0000154
R David Murraye3d09ff2011-03-15 17:41:13 -0400155 If there is no existing :mailheader:`MIME-Version` header one will be
156 added. If there is no existing :mailheader:`Content-Type` header, one
157 will be added with a value of :mimetype:`text/plain`. Whether the
158 :mailheader:`Content-Type` header already exists or not, its ``charset``
159 parameter will be set to *charset.output_charset*. If
160 *charset.input_charset* and *charset.output_charset* differ, the payload
161 will be re-encoded to the *output_charset*. If there is no existing
162 :mailheader:`Content-Transfer-Encoding` header, then the payload will be
163 transfer-encoded, if needed, using the specified
164 :class:`~email.charset.Charset`, and a header with the appropriate value
165 will be added. If a :mailheader:`Content-Transfer-Encoding` header
166 already exists, the payload is assumed to already be correctly encoded
167 using that :mailheader:`Content-Transfer-Encoding` and is not modified.
Georg Brandl116aa622007-08-15 14:28:22 +0000168
Benjamin Petersone41251e2008-04-25 01:59:09 +0000169 .. method:: get_charset()
Georg Brandl116aa622007-08-15 14:28:22 +0000170
Georg Brandl3638e482009-04-27 16:46:17 +0000171 Return the :class:`~email.charset.Charset` instance associated with the
172 message's payload.
Georg Brandl116aa622007-08-15 14:28:22 +0000173
Benjamin Petersone41251e2008-04-25 01:59:09 +0000174 The following methods implement a mapping-like interface for accessing the
175 message's :rfc:`2822` headers. Note that there are some semantic differences
176 between these methods and a normal mapping (i.e. dictionary) interface. For
177 example, in a dictionary there are no duplicate keys, but here there may be
178 duplicate message headers. Also, in dictionaries there is no guaranteed
179 order to the keys returned by :meth:`keys`, but in a :class:`Message` object,
180 headers are always returned in the order they appeared in the original
181 message, or were added to the message later. Any header deleted and then
182 re-added are always appended to the end of the header list.
Georg Brandl116aa622007-08-15 14:28:22 +0000183
Benjamin Petersone41251e2008-04-25 01:59:09 +0000184 These semantic differences are intentional and are biased toward maximal
185 convenience.
Georg Brandl116aa622007-08-15 14:28:22 +0000186
Benjamin Petersone41251e2008-04-25 01:59:09 +0000187 Note that in all cases, any envelope header present in the message is not
188 included in the mapping interface.
Georg Brandl116aa622007-08-15 14:28:22 +0000189
R. David Murray92532142011-01-07 23:25:30 +0000190 In a model generated from bytes, any header values that (in contravention of
191 the RFCs) contain non-ASCII bytes will, when retrieved through this
192 interface, be represented as :class:`~email.header.Header` objects with
193 a charset of `unknown-8bit`.
R. David Murray96fd54e2010-10-08 15:55:28 +0000194
Georg Brandl116aa622007-08-15 14:28:22 +0000195
Benjamin Petersone41251e2008-04-25 01:59:09 +0000196 .. method:: __len__()
Georg Brandl116aa622007-08-15 14:28:22 +0000197
Benjamin Petersone41251e2008-04-25 01:59:09 +0000198 Return the total number of headers, including duplicates.
Georg Brandl116aa622007-08-15 14:28:22 +0000199
200
Benjamin Petersone41251e2008-04-25 01:59:09 +0000201 .. method:: __contains__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000202
Benjamin Petersone41251e2008-04-25 01:59:09 +0000203 Return true if the message object has a field named *name*. Matching is
204 done case-insensitively and *name* should not include the trailing colon.
205 Used for the ``in`` operator, e.g.::
Georg Brandl116aa622007-08-15 14:28:22 +0000206
Benjamin Petersone41251e2008-04-25 01:59:09 +0000207 if 'message-id' in myMessage:
208 print('Message-ID:', myMessage['message-id'])
Georg Brandl116aa622007-08-15 14:28:22 +0000209
210
Benjamin Petersone41251e2008-04-25 01:59:09 +0000211 .. method:: __getitem__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000212
Benjamin Petersone41251e2008-04-25 01:59:09 +0000213 Return the value of the named header field. *name* should not include the
214 colon field separator. If the header is missing, ``None`` is returned; a
215 :exc:`KeyError` is never raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000216
Benjamin Petersone41251e2008-04-25 01:59:09 +0000217 Note that if the named field appears more than once in the message's
218 headers, exactly which of those field values will be returned is
219 undefined. Use the :meth:`get_all` method to get the values of all the
220 extant named headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000221
222
Benjamin Petersone41251e2008-04-25 01:59:09 +0000223 .. method:: __setitem__(name, val)
Georg Brandl116aa622007-08-15 14:28:22 +0000224
Benjamin Petersone41251e2008-04-25 01:59:09 +0000225 Add a header to the message with field name *name* and value *val*. The
226 field is appended to the end of the message's existing fields.
Georg Brandl116aa622007-08-15 14:28:22 +0000227
Benjamin Petersone41251e2008-04-25 01:59:09 +0000228 Note that this does *not* overwrite or delete any existing header with the same
229 name. If you want to ensure that the new header is the only one present in the
230 message with field name *name*, delete the field first, e.g.::
Georg Brandl116aa622007-08-15 14:28:22 +0000231
Benjamin Petersone41251e2008-04-25 01:59:09 +0000232 del msg['subject']
233 msg['subject'] = 'Python roolz!'
Georg Brandl116aa622007-08-15 14:28:22 +0000234
235
Benjamin Petersone41251e2008-04-25 01:59:09 +0000236 .. method:: __delitem__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000237
Benjamin Petersone41251e2008-04-25 01:59:09 +0000238 Delete all occurrences of the field with name *name* from the message's
Georg Brandl3f076d82009-05-17 11:28:33 +0000239 headers. No exception is raised if the named field isn't present in the
240 headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000241
242
Benjamin Petersone41251e2008-04-25 01:59:09 +0000243 .. method:: keys()
Georg Brandl116aa622007-08-15 14:28:22 +0000244
Benjamin Petersone41251e2008-04-25 01:59:09 +0000245 Return a list of all the message's header field names.
Georg Brandl116aa622007-08-15 14:28:22 +0000246
247
Benjamin Petersone41251e2008-04-25 01:59:09 +0000248 .. method:: values()
Georg Brandl116aa622007-08-15 14:28:22 +0000249
Benjamin Petersone41251e2008-04-25 01:59:09 +0000250 Return a list of all the message's field values.
Georg Brandl116aa622007-08-15 14:28:22 +0000251
252
Benjamin Petersone41251e2008-04-25 01:59:09 +0000253 .. method:: items()
Georg Brandl116aa622007-08-15 14:28:22 +0000254
Benjamin Petersone41251e2008-04-25 01:59:09 +0000255 Return a list of 2-tuples containing all the message's field headers and
256 values.
Georg Brandl116aa622007-08-15 14:28:22 +0000257
258
Georg Brandl3f076d82009-05-17 11:28:33 +0000259 .. method:: get(name, failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000260
Benjamin Petersone41251e2008-04-25 01:59:09 +0000261 Return the value of the named header field. This is identical to
262 :meth:`__getitem__` except that optional *failobj* is returned if the
263 named header is missing (defaults to ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000264
Benjamin Petersone41251e2008-04-25 01:59:09 +0000265 Here are some additional useful methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000266
267
Georg Brandl3f076d82009-05-17 11:28:33 +0000268 .. method:: get_all(name, failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000269
Benjamin Petersone41251e2008-04-25 01:59:09 +0000270 Return a list of all the values for the field named *name*. If there are
271 no such named headers in the message, *failobj* is returned (defaults to
272 ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000273
274
Benjamin Petersone41251e2008-04-25 01:59:09 +0000275 .. method:: add_header(_name, _value, **_params)
Georg Brandl116aa622007-08-15 14:28:22 +0000276
Benjamin Petersone41251e2008-04-25 01:59:09 +0000277 Extended header setting. This method is similar to :meth:`__setitem__`
278 except that additional header parameters can be provided as keyword
279 arguments. *_name* is the header field to add and *_value* is the
280 *primary* value for the header.
Georg Brandl116aa622007-08-15 14:28:22 +0000281
Benjamin Petersone41251e2008-04-25 01:59:09 +0000282 For each item in the keyword argument dictionary *_params*, the key is
283 taken as the parameter name, with underscores converted to dashes (since
284 dashes are illegal in Python identifiers). Normally, the parameter will
285 be added as ``key="value"`` unless the value is ``None``, in which case
R. David Murray7ec754b2010-12-13 23:51:19 +0000286 only the key will be added. If the value contains non-ASCII characters,
287 it can be specified as a three tuple in the format
288 ``(CHARSET, LANGUAGE, VALUE)``, where ``CHARSET`` is a string naming the
289 charset to be used to encode the value, ``LANGUAGE`` can usually be set
Georg Brandlc8843502010-12-19 10:28:46 +0000290 to ``None`` or the empty string (see :rfc:`2231` for other possibilities),
R. David Murray7ec754b2010-12-13 23:51:19 +0000291 and ``VALUE`` is the string value containing non-ASCII code points. If
292 a three tuple is not passed and the value contains non-ASCII characters,
Georg Brandlc8843502010-12-19 10:28:46 +0000293 it is automatically encoded in :rfc:`2231` format using a ``CHARSET``
R. David Murray7ec754b2010-12-13 23:51:19 +0000294 of ``utf-8`` and a ``LANGUAGE`` of ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000295
Benjamin Petersone41251e2008-04-25 01:59:09 +0000296 Here's an example::
Georg Brandl116aa622007-08-15 14:28:22 +0000297
Benjamin Petersone41251e2008-04-25 01:59:09 +0000298 msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')
Georg Brandl116aa622007-08-15 14:28:22 +0000299
Benjamin Petersone41251e2008-04-25 01:59:09 +0000300 This will add a header that looks like ::
Georg Brandl116aa622007-08-15 14:28:22 +0000301
Benjamin Petersone41251e2008-04-25 01:59:09 +0000302 Content-Disposition: attachment; filename="bud.gif"
Georg Brandl116aa622007-08-15 14:28:22 +0000303
Ezio Melottie130a522011-10-19 10:58:56 +0300304 An example with non-ASCII characters::
R. David Murray7ec754b2010-12-13 23:51:19 +0000305
306 msg.add_header('Content-Disposition', 'attachment',
307 filename=('iso-8859-1', '', 'Fußballer.ppt'))
308
309 Which produces ::
310
311 Content-Disposition: attachment; filename*="iso-8859-1''Fu%DFballer.ppt"
312
Georg Brandl116aa622007-08-15 14:28:22 +0000313
Benjamin Petersone41251e2008-04-25 01:59:09 +0000314 .. method:: replace_header(_name, _value)
Georg Brandl116aa622007-08-15 14:28:22 +0000315
Benjamin Petersone41251e2008-04-25 01:59:09 +0000316 Replace a header. Replace the first header found in the message that
317 matches *_name*, retaining header order and field name case. If no
318 matching header was found, a :exc:`KeyError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000319
Georg Brandl116aa622007-08-15 14:28:22 +0000320
Benjamin Petersone41251e2008-04-25 01:59:09 +0000321 .. method:: get_content_type()
Georg Brandl116aa622007-08-15 14:28:22 +0000322
Benjamin Petersone41251e2008-04-25 01:59:09 +0000323 Return the message's content type. The returned string is coerced to
324 lower case of the form :mimetype:`maintype/subtype`. If there was no
325 :mailheader:`Content-Type` header in the message the default type as given
326 by :meth:`get_default_type` will be returned. Since according to
327 :rfc:`2045`, messages always have a default type, :meth:`get_content_type`
328 will always return a value.
Georg Brandl116aa622007-08-15 14:28:22 +0000329
Benjamin Petersone41251e2008-04-25 01:59:09 +0000330 :rfc:`2045` defines a message's default type to be :mimetype:`text/plain`
331 unless it appears inside a :mimetype:`multipart/digest` container, in
332 which case it would be :mimetype:`message/rfc822`. If the
333 :mailheader:`Content-Type` header has an invalid type specification,
334 :rfc:`2045` mandates that the default type be :mimetype:`text/plain`.
Georg Brandl116aa622007-08-15 14:28:22 +0000335
Georg Brandl116aa622007-08-15 14:28:22 +0000336
Benjamin Petersone41251e2008-04-25 01:59:09 +0000337 .. method:: get_content_maintype()
Georg Brandl116aa622007-08-15 14:28:22 +0000338
Benjamin Petersone41251e2008-04-25 01:59:09 +0000339 Return the message's main content type. This is the :mimetype:`maintype`
340 part of the string returned by :meth:`get_content_type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000341
Georg Brandl116aa622007-08-15 14:28:22 +0000342
Benjamin Petersone41251e2008-04-25 01:59:09 +0000343 .. method:: get_content_subtype()
Georg Brandl116aa622007-08-15 14:28:22 +0000344
Benjamin Petersone41251e2008-04-25 01:59:09 +0000345 Return the message's sub-content type. This is the :mimetype:`subtype`
346 part of the string returned by :meth:`get_content_type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000347
Georg Brandl116aa622007-08-15 14:28:22 +0000348
Benjamin Petersone41251e2008-04-25 01:59:09 +0000349 .. method:: get_default_type()
Georg Brandl116aa622007-08-15 14:28:22 +0000350
Benjamin Petersone41251e2008-04-25 01:59:09 +0000351 Return the default content type. Most messages have a default content
352 type of :mimetype:`text/plain`, except for messages that are subparts of
353 :mimetype:`multipart/digest` containers. Such subparts have a default
354 content type of :mimetype:`message/rfc822`.
Georg Brandl116aa622007-08-15 14:28:22 +0000355
Georg Brandl116aa622007-08-15 14:28:22 +0000356
Benjamin Petersone41251e2008-04-25 01:59:09 +0000357 .. method:: set_default_type(ctype)
Georg Brandl116aa622007-08-15 14:28:22 +0000358
Benjamin Petersone41251e2008-04-25 01:59:09 +0000359 Set the default content type. *ctype* should either be
360 :mimetype:`text/plain` or :mimetype:`message/rfc822`, although this is not
361 enforced. The default content type is not stored in the
362 :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000363
Georg Brandl116aa622007-08-15 14:28:22 +0000364
Georg Brandl3f076d82009-05-17 11:28:33 +0000365 .. method:: get_params(failobj=None, header='content-type', unquote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000366
Benjamin Petersone41251e2008-04-25 01:59:09 +0000367 Return the message's :mailheader:`Content-Type` parameters, as a list.
368 The elements of the returned list are 2-tuples of key/value pairs, as
369 split on the ``'='`` sign. The left hand side of the ``'='`` is the key,
370 while the right hand side is the value. If there is no ``'='`` sign in
371 the parameter the value is the empty string, otherwise the value is as
372 described in :meth:`get_param` and is unquoted if optional *unquote* is
373 ``True`` (the default).
Georg Brandl116aa622007-08-15 14:28:22 +0000374
Benjamin Petersone41251e2008-04-25 01:59:09 +0000375 Optional *failobj* is the object to return if there is no
376 :mailheader:`Content-Type` header. Optional *header* is the header to
377 search instead of :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000378
Georg Brandl116aa622007-08-15 14:28:22 +0000379
Georg Brandl3f076d82009-05-17 11:28:33 +0000380 .. method:: get_param(param, failobj=None, header='content-type', unquote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000381
Benjamin Petersone41251e2008-04-25 01:59:09 +0000382 Return the value of the :mailheader:`Content-Type` header's parameter
383 *param* as a string. If the message has no :mailheader:`Content-Type`
384 header or if there is no such parameter, then *failobj* is returned
385 (defaults to ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000386
Benjamin Petersone41251e2008-04-25 01:59:09 +0000387 Optional *header* if given, specifies the message header to use instead of
388 :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000389
Benjamin Petersone41251e2008-04-25 01:59:09 +0000390 Parameter keys are always compared case insensitively. The return value
391 can either be a string, or a 3-tuple if the parameter was :rfc:`2231`
392 encoded. When it's a 3-tuple, the elements of the value are of the form
393 ``(CHARSET, LANGUAGE, VALUE)``. Note that both ``CHARSET`` and
394 ``LANGUAGE`` can be ``None``, in which case you should consider ``VALUE``
395 to be encoded in the ``us-ascii`` charset. You can usually ignore
396 ``LANGUAGE``.
Georg Brandl116aa622007-08-15 14:28:22 +0000397
Benjamin Petersone41251e2008-04-25 01:59:09 +0000398 If your application doesn't care whether the parameter was encoded as in
399 :rfc:`2231`, you can collapse the parameter value by calling
Georg Brandl540b45c2009-04-27 16:45:26 +0000400 :func:`email.utils.collapse_rfc2231_value`, passing in the return value
Benjamin Petersone41251e2008-04-25 01:59:09 +0000401 from :meth:`get_param`. This will return a suitably decoded Unicode
R. David Murray7ec754b2010-12-13 23:51:19 +0000402 string when the value is a tuple, or the original string unquoted if it
Benjamin Petersone41251e2008-04-25 01:59:09 +0000403 isn't. For example::
Georg Brandl116aa622007-08-15 14:28:22 +0000404
Benjamin Petersone41251e2008-04-25 01:59:09 +0000405 rawparam = msg.get_param('foo')
Georg Brandl540b45c2009-04-27 16:45:26 +0000406 param = email.utils.collapse_rfc2231_value(rawparam)
Georg Brandl116aa622007-08-15 14:28:22 +0000407
Benjamin Petersone41251e2008-04-25 01:59:09 +0000408 In any case, the parameter value (either the returned string, or the
409 ``VALUE`` item in the 3-tuple) is always unquoted, unless *unquote* is set
410 to ``False``.
Georg Brandl116aa622007-08-15 14:28:22 +0000411
Georg Brandl116aa622007-08-15 14:28:22 +0000412
Georg Brandl3f076d82009-05-17 11:28:33 +0000413 .. method:: set_param(param, value, header='Content-Type', requote=True, charset=None, language='')
Georg Brandl116aa622007-08-15 14:28:22 +0000414
Benjamin Petersone41251e2008-04-25 01:59:09 +0000415 Set a parameter in the :mailheader:`Content-Type` header. If the
416 parameter already exists in the header, its value will be replaced with
417 *value*. If the :mailheader:`Content-Type` header as not yet been defined
418 for this message, it will be set to :mimetype:`text/plain` and the new
419 parameter value will be appended as per :rfc:`2045`.
Georg Brandl116aa622007-08-15 14:28:22 +0000420
Benjamin Petersone41251e2008-04-25 01:59:09 +0000421 Optional *header* specifies an alternative header to
422 :mailheader:`Content-Type`, and all parameters will be quoted as necessary
423 unless optional *requote* is ``False`` (the default is ``True``).
Georg Brandl116aa622007-08-15 14:28:22 +0000424
Benjamin Petersone41251e2008-04-25 01:59:09 +0000425 If optional *charset* is specified, the parameter will be encoded
426 according to :rfc:`2231`. Optional *language* specifies the RFC 2231
427 language, defaulting to the empty string. Both *charset* and *language*
428 should be strings.
Georg Brandl116aa622007-08-15 14:28:22 +0000429
Georg Brandl116aa622007-08-15 14:28:22 +0000430
Georg Brandl3f076d82009-05-17 11:28:33 +0000431 .. method:: del_param(param, header='content-type', requote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000432
Benjamin Petersone41251e2008-04-25 01:59:09 +0000433 Remove the given parameter completely from the :mailheader:`Content-Type`
434 header. The header will be re-written in place without the parameter or
435 its value. All values will be quoted as necessary unless *requote* is
436 ``False`` (the default is ``True``). Optional *header* specifies an
437 alternative to :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000438
Georg Brandl116aa622007-08-15 14:28:22 +0000439
Georg Brandl3f076d82009-05-17 11:28:33 +0000440 .. method:: set_type(type, header='Content-Type', requote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000441
Benjamin Petersone41251e2008-04-25 01:59:09 +0000442 Set the main type and subtype for the :mailheader:`Content-Type`
443 header. *type* must be a string in the form :mimetype:`maintype/subtype`,
444 otherwise a :exc:`ValueError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000445
Benjamin Petersone41251e2008-04-25 01:59:09 +0000446 This method replaces the :mailheader:`Content-Type` header, keeping all
447 the parameters in place. If *requote* is ``False``, this leaves the
448 existing header's quoting as is, otherwise the parameters will be quoted
449 (the default).
Georg Brandl116aa622007-08-15 14:28:22 +0000450
Benjamin Petersone41251e2008-04-25 01:59:09 +0000451 An alternative header can be specified in the *header* argument. When the
452 :mailheader:`Content-Type` header is set a :mailheader:`MIME-Version`
453 header is also added.
Georg Brandl116aa622007-08-15 14:28:22 +0000454
Georg Brandl116aa622007-08-15 14:28:22 +0000455
Georg Brandl3f076d82009-05-17 11:28:33 +0000456 .. method:: get_filename(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000457
Benjamin Petersone41251e2008-04-25 01:59:09 +0000458 Return the value of the ``filename`` parameter of the
459 :mailheader:`Content-Disposition` header of the message. If the header
460 does not have a ``filename`` parameter, this method falls back to looking
R. David Murray9ed34be2010-03-04 17:38:18 +0000461 for the ``name`` parameter on the :mailheader:`Content-Type` header. If
462 neither is found, or the header is missing, then *failobj* is returned.
463 The returned string will always be unquoted as per
464 :func:`email.utils.unquote`.
Georg Brandl116aa622007-08-15 14:28:22 +0000465
466
Georg Brandl3f076d82009-05-17 11:28:33 +0000467 .. method:: get_boundary(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000468
Benjamin Petersone41251e2008-04-25 01:59:09 +0000469 Return the value of the ``boundary`` parameter of the
470 :mailheader:`Content-Type` header of the message, or *failobj* if either
471 the header is missing, or has no ``boundary`` parameter. The returned
Georg Brandl540b45c2009-04-27 16:45:26 +0000472 string will always be unquoted as per :func:`email.utils.unquote`.
Georg Brandl116aa622007-08-15 14:28:22 +0000473
474
Benjamin Petersone41251e2008-04-25 01:59:09 +0000475 .. method:: set_boundary(boundary)
Georg Brandl116aa622007-08-15 14:28:22 +0000476
Benjamin Petersone41251e2008-04-25 01:59:09 +0000477 Set the ``boundary`` parameter of the :mailheader:`Content-Type` header to
478 *boundary*. :meth:`set_boundary` will always quote *boundary* if
Serhiy Storchakae0f0cf42013-08-19 09:59:18 +0300479 necessary. A :exc:`~email.errors.HeaderParseError` is raised if the
480 message object has no :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000481
Benjamin Petersone41251e2008-04-25 01:59:09 +0000482 Note that using this method is subtly different than deleting the old
483 :mailheader:`Content-Type` header and adding a new one with the new
484 boundary via :meth:`add_header`, because :meth:`set_boundary` preserves
485 the order of the :mailheader:`Content-Type` header in the list of
486 headers. However, it does *not* preserve any continuation lines which may
487 have been present in the original :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000488
489
Georg Brandl3f076d82009-05-17 11:28:33 +0000490 .. method:: get_content_charset(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000491
Benjamin Petersone41251e2008-04-25 01:59:09 +0000492 Return the ``charset`` parameter of the :mailheader:`Content-Type` header,
493 coerced to lower case. If there is no :mailheader:`Content-Type` header, or if
494 that header has no ``charset`` parameter, *failobj* is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000495
Benjamin Petersone41251e2008-04-25 01:59:09 +0000496 Note that this method differs from :meth:`get_charset` which returns the
Georg Brandl3638e482009-04-27 16:46:17 +0000497 :class:`~email.charset.Charset` instance for the default encoding of the message body.
Georg Brandl116aa622007-08-15 14:28:22 +0000498
Georg Brandl116aa622007-08-15 14:28:22 +0000499
Georg Brandl3f076d82009-05-17 11:28:33 +0000500 .. method:: get_charsets(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000501
Benjamin Petersone41251e2008-04-25 01:59:09 +0000502 Return a list containing the character set names in the message. If the
503 message is a :mimetype:`multipart`, then the list will contain one element
504 for each subpart in the payload, otherwise, it will be a list of length 1.
Georg Brandl116aa622007-08-15 14:28:22 +0000505
Benjamin Petersone41251e2008-04-25 01:59:09 +0000506 Each item in the list will be a string which is the value of the
507 ``charset`` parameter in the :mailheader:`Content-Type` header for the
508 represented subpart. However, if the subpart has no
509 :mailheader:`Content-Type` header, no ``charset`` parameter, or is not of
510 the :mimetype:`text` main MIME type, then that item in the returned list
511 will be *failobj*.
Georg Brandl116aa622007-08-15 14:28:22 +0000512
513
Benjamin Petersone41251e2008-04-25 01:59:09 +0000514 .. method:: walk()
Georg Brandl116aa622007-08-15 14:28:22 +0000515
Benjamin Petersone41251e2008-04-25 01:59:09 +0000516 The :meth:`walk` method is an all-purpose generator which can be used to
517 iterate over all the parts and subparts of a message object tree, in
518 depth-first traversal order. You will typically use :meth:`walk` as the
519 iterator in a ``for`` loop; each iteration returns the next subpart.
Georg Brandl116aa622007-08-15 14:28:22 +0000520
Benjamin Petersone41251e2008-04-25 01:59:09 +0000521 Here's an example that prints the MIME type of every part of a multipart
R David Murrayfdfb0052013-07-29 15:49:58 -0400522 message structure:
Georg Brandl116aa622007-08-15 14:28:22 +0000523
R David Murrayfdfb0052013-07-29 15:49:58 -0400524 .. testsetup::
525
526 >>> from email import message_from_binary_file
527 >>> with open('Lib/test/test_email/data/msg_16.txt', 'rb') as f:
528 ... msg = message_from_binary_file(f)
529
530 .. doctest::
531
532 >>> for part in msg.walk():
533 ... print(part.get_content_type())
534 multipart/report
535 text/plain
536 message/delivery-status
537 text/plain
538 text/plain
539 message/rfc822
540 text/plain
Georg Brandl116aa622007-08-15 14:28:22 +0000541
Benjamin Petersone41251e2008-04-25 01:59:09 +0000542 :class:`Message` objects can also optionally contain two instance attributes,
543 which can be used when generating the plain text of a MIME message.
Georg Brandl116aa622007-08-15 14:28:22 +0000544
545
Benjamin Petersone41251e2008-04-25 01:59:09 +0000546 .. attribute:: preamble
Georg Brandl116aa622007-08-15 14:28:22 +0000547
Benjamin Petersone41251e2008-04-25 01:59:09 +0000548 The format of a MIME document allows for some text between the blank line
549 following the headers, and the first multipart boundary string. Normally,
550 this text is never visible in a MIME-aware mail reader because it falls
551 outside the standard MIME armor. However, when viewing the raw text of
552 the message, or when viewing the message in a non-MIME aware reader, this
553 text can become visible.
Georg Brandl116aa622007-08-15 14:28:22 +0000554
Benjamin Petersone41251e2008-04-25 01:59:09 +0000555 The *preamble* attribute contains this leading extra-armor text for MIME
Georg Brandl3638e482009-04-27 16:46:17 +0000556 documents. When the :class:`~email.parser.Parser` discovers some text
557 after the headers but before the first boundary string, it assigns this
558 text to the message's *preamble* attribute. When the
559 :class:`~email.generator.Generator` is writing out the plain text
560 representation of a MIME message, and it finds the
Benjamin Petersone41251e2008-04-25 01:59:09 +0000561 message has a *preamble* attribute, it will write this text in the area
562 between the headers and the first boundary. See :mod:`email.parser` and
563 :mod:`email.generator` for details.
Georg Brandl116aa622007-08-15 14:28:22 +0000564
Benjamin Petersone41251e2008-04-25 01:59:09 +0000565 Note that if the message object has no preamble, the *preamble* attribute
566 will be ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000567
568
Benjamin Petersone41251e2008-04-25 01:59:09 +0000569 .. attribute:: epilogue
Georg Brandl116aa622007-08-15 14:28:22 +0000570
Benjamin Petersone41251e2008-04-25 01:59:09 +0000571 The *epilogue* attribute acts the same way as the *preamble* attribute,
572 except that it contains text that appears between the last boundary and
573 the end of the message.
Georg Brandl116aa622007-08-15 14:28:22 +0000574
Benjamin Petersone41251e2008-04-25 01:59:09 +0000575 You do not need to set the epilogue to the empty string in order for the
Serhiy Storchakae0f0cf42013-08-19 09:59:18 +0300576 :class:`~email.generator.Generator` to print a newline at the end of the
577 file.
Georg Brandl116aa622007-08-15 14:28:22 +0000578
579
Benjamin Petersone41251e2008-04-25 01:59:09 +0000580 .. attribute:: defects
Georg Brandl116aa622007-08-15 14:28:22 +0000581
Benjamin Petersone41251e2008-04-25 01:59:09 +0000582 The *defects* attribute contains a list of all the problems found when
583 parsing this message. See :mod:`email.errors` for a detailed description
584 of the possible parsing defects.