blob: dc305a7fd8b07081158a0d49e4447d57ed0dcf9a [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`email`: Representing an email message
2-------------------------------------------
3
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
34.. class:: Message()
35
36 The constructor takes no arguments.
37
38
Georg Brandl3f076d82009-05-17 11:28:33 +000039 .. method:: as_string(unixfrom=False, maxheaderlen=0)
Georg Brandl116aa622007-08-15 14:28:22 +000040
Benjamin Petersone41251e2008-04-25 01:59:09 +000041 Return the entire message flattened as a string. When optional *unixfrom*
42 is ``True``, the envelope header is included in the returned string.
R. David Murray101f2782010-01-10 19:18:27 +000043 *unixfrom* defaults to ``False``. Flattening the message may trigger
44 changes to the :class:`Message` if defaults need to be filled in to
45 complete the transformation to a string (for example, MIME boundaries may
46 be generated or modified).
Georg Brandl116aa622007-08-15 14:28:22 +000047
Benjamin Petersone41251e2008-04-25 01:59:09 +000048 Note that this method is provided as a convenience and may not always
49 format the message the way you want. For example, by default it mangles
50 lines that begin with ``From``. For more flexibility, instantiate a
Georg Brandl3638e482009-04-27 16:46:17 +000051 :class:`~email.generator.Generator` instance and use its :meth:`flatten`
52 method directly. For example::
Georg Brandl116aa622007-08-15 14:28:22 +000053
Georg Brandl03124942008-06-10 15:50:56 +000054 from io import StringIO
Benjamin Petersone41251e2008-04-25 01:59:09 +000055 from email.generator import Generator
56 fp = StringIO()
57 g = Generator(fp, mangle_from_=False, maxheaderlen=60)
58 g.flatten(msg)
59 text = fp.getvalue()
Georg Brandl116aa622007-08-15 14:28:22 +000060
61
Benjamin Petersone41251e2008-04-25 01:59:09 +000062 .. method:: __str__()
Georg Brandl116aa622007-08-15 14:28:22 +000063
Benjamin Petersone41251e2008-04-25 01:59:09 +000064 Equivalent to ``as_string(unixfrom=True)``.
Georg Brandl116aa622007-08-15 14:28:22 +000065
66
Benjamin Petersone41251e2008-04-25 01:59:09 +000067 .. method:: is_multipart()
Georg Brandl116aa622007-08-15 14:28:22 +000068
Benjamin Petersone41251e2008-04-25 01:59:09 +000069 Return ``True`` if the message's payload is a list of sub-\
70 :class:`Message` objects, otherwise return ``False``. When
71 :meth:`is_multipart` returns False, the payload should be a string object.
Georg Brandl116aa622007-08-15 14:28:22 +000072
73
Benjamin Petersone41251e2008-04-25 01:59:09 +000074 .. method:: set_unixfrom(unixfrom)
Georg Brandl116aa622007-08-15 14:28:22 +000075
Benjamin Petersone41251e2008-04-25 01:59:09 +000076 Set the message's envelope header to *unixfrom*, which should be a string.
Georg Brandl116aa622007-08-15 14:28:22 +000077
78
Benjamin Petersone41251e2008-04-25 01:59:09 +000079 .. method:: get_unixfrom()
Georg Brandl116aa622007-08-15 14:28:22 +000080
Benjamin Petersone41251e2008-04-25 01:59:09 +000081 Return the message's envelope header. Defaults to ``None`` if the
82 envelope header was never set.
Georg Brandl116aa622007-08-15 14:28:22 +000083
84
Benjamin Petersone41251e2008-04-25 01:59:09 +000085 .. method:: attach(payload)
Georg Brandl116aa622007-08-15 14:28:22 +000086
Benjamin Petersone41251e2008-04-25 01:59:09 +000087 Add the given *payload* to the current payload, which must be ``None`` or
88 a list of :class:`Message` objects before the call. After the call, the
89 payload will always be a list of :class:`Message` objects. If you want to
90 set the payload to a scalar object (e.g. a string), use
91 :meth:`set_payload` instead.
Georg Brandl116aa622007-08-15 14:28:22 +000092
93
Georg Brandl3f076d82009-05-17 11:28:33 +000094 .. method:: get_payload(i=None, decode=False)
Georg Brandl116aa622007-08-15 14:28:22 +000095
Benjamin Petersond6313712008-07-31 16:23:04 +000096 Return the current payload, which will be a list of
Benjamin Petersone41251e2008-04-25 01:59:09 +000097 :class:`Message` objects when :meth:`is_multipart` is ``True``, or a
98 string when :meth:`is_multipart` is ``False``. If the payload is a list
99 and you mutate the list object, you modify the message's payload in place.
Georg Brandl116aa622007-08-15 14:28:22 +0000100
Benjamin Petersone41251e2008-04-25 01:59:09 +0000101 With optional argument *i*, :meth:`get_payload` will return the *i*-th
102 element of the payload, counting from zero, if :meth:`is_multipart` is
103 ``True``. An :exc:`IndexError` will be raised if *i* is less than 0 or
104 greater than or equal to the number of items in the payload. If the
105 payload is a string (i.e. :meth:`is_multipart` is ``False``) and *i* is
106 given, a :exc:`TypeError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000107
Benjamin Petersone41251e2008-04-25 01:59:09 +0000108 Optional *decode* is a flag indicating whether the payload should be
109 decoded or not, according to the :mailheader:`Content-Transfer-Encoding`
110 header. When ``True`` and the message is not a multipart, the payload will
111 be decoded if this header's value is ``quoted-printable`` or ``base64``.
112 If some other encoding is used, or :mailheader:`Content-Transfer-Encoding`
113 header is missing, or if the payload has bogus base64 data, the payload is
R. David Murray96fd54e2010-10-08 15:55:28 +0000114 returned as-is (undecoded). In all cases the returned value is binary
115 data. If the message is a multipart and the *decode* flag is ``True``,
116 then ``None`` is returned.
117
118 When *decode* is ``False`` (the default) the body is returned as a string
119 without decoding the :mailheader:`Content-Transfer-Encoding`. However,
120 for a :mailheader:`Content-Transfer-Encoding` of 8bit, an attempt is made
121 to decode the original bytes using the `charset` specified by the
122 :mailheader:`Content-Type` header, using the `replace` error handler. If
123 no `charset` is specified, or if the `charset` given is not recognized by
124 the email package, the body is decoded using the default ASCII charset.
Georg Brandl116aa622007-08-15 14:28:22 +0000125
126
Georg Brandl3f076d82009-05-17 11:28:33 +0000127 .. method:: set_payload(payload, charset=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000128
Benjamin Petersone41251e2008-04-25 01:59:09 +0000129 Set the entire message object's payload to *payload*. It is the client's
130 responsibility to ensure the payload invariants. Optional *charset* sets
131 the message's default character set; see :meth:`set_charset` for details.
Georg Brandl116aa622007-08-15 14:28:22 +0000132
Benjamin Petersone41251e2008-04-25 01:59:09 +0000133 .. method:: set_charset(charset)
Georg Brandl116aa622007-08-15 14:28:22 +0000134
Benjamin Petersone41251e2008-04-25 01:59:09 +0000135 Set the character set of the payload to *charset*, which can either be a
Georg Brandl3638e482009-04-27 16:46:17 +0000136 :class:`~email.charset.Charset` instance (see :mod:`email.charset`), a
137 string naming a character set, or ``None``. If it is a string, it will
138 be converted to a :class:`~email.charset.Charset` instance. If *charset*
139 is ``None``, the ``charset`` parameter will be removed from the
140 :mailheader:`Content-Type` header. Anything else will generate a
141 :exc:`TypeError`.
Georg Brandl116aa622007-08-15 14:28:22 +0000142
Benjamin Petersone41251e2008-04-25 01:59:09 +0000143 The message will be assumed to be of type :mimetype:`text/\*` encoded with
144 *charset.input_charset*. It will be converted to *charset.output_charset*
145 and encoded properly, if needed, when generating the plain text
146 representation of the message. MIME headers (:mailheader:`MIME-Version`,
147 :mailheader:`Content-Type`, :mailheader:`Content-Transfer-Encoding`) will
148 be added as needed.
Georg Brandl116aa622007-08-15 14:28:22 +0000149
Benjamin Petersone41251e2008-04-25 01:59:09 +0000150 .. method:: get_charset()
Georg Brandl116aa622007-08-15 14:28:22 +0000151
Georg Brandl3638e482009-04-27 16:46:17 +0000152 Return the :class:`~email.charset.Charset` instance associated with the
153 message's payload.
Georg Brandl116aa622007-08-15 14:28:22 +0000154
Benjamin Petersone41251e2008-04-25 01:59:09 +0000155 The following methods implement a mapping-like interface for accessing the
156 message's :rfc:`2822` headers. Note that there are some semantic differences
157 between these methods and a normal mapping (i.e. dictionary) interface. For
158 example, in a dictionary there are no duplicate keys, but here there may be
159 duplicate message headers. Also, in dictionaries there is no guaranteed
160 order to the keys returned by :meth:`keys`, but in a :class:`Message` object,
161 headers are always returned in the order they appeared in the original
162 message, or were added to the message later. Any header deleted and then
163 re-added are always appended to the end of the header list.
Georg Brandl116aa622007-08-15 14:28:22 +0000164
Benjamin Petersone41251e2008-04-25 01:59:09 +0000165 These semantic differences are intentional and are biased toward maximal
166 convenience.
Georg Brandl116aa622007-08-15 14:28:22 +0000167
Benjamin Petersone41251e2008-04-25 01:59:09 +0000168 Note that in all cases, any envelope header present in the message is not
169 included in the mapping interface.
Georg Brandl116aa622007-08-15 14:28:22 +0000170
R. David Murray96fd54e2010-10-08 15:55:28 +0000171 In a model generated from bytes, any header values that (in contravention
172 of the RFCs) contain non-ASCII bytes will have those bytes transformed
173 into '?' characters when the values are retrieved through this interface.
174
Georg Brandl116aa622007-08-15 14:28:22 +0000175
Benjamin Petersone41251e2008-04-25 01:59:09 +0000176 .. method:: __len__()
Georg Brandl116aa622007-08-15 14:28:22 +0000177
Benjamin Petersone41251e2008-04-25 01:59:09 +0000178 Return the total number of headers, including duplicates.
Georg Brandl116aa622007-08-15 14:28:22 +0000179
180
Benjamin Petersone41251e2008-04-25 01:59:09 +0000181 .. method:: __contains__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000182
Benjamin Petersone41251e2008-04-25 01:59:09 +0000183 Return true if the message object has a field named *name*. Matching is
184 done case-insensitively and *name* should not include the trailing colon.
185 Used for the ``in`` operator, e.g.::
Georg Brandl116aa622007-08-15 14:28:22 +0000186
Benjamin Petersone41251e2008-04-25 01:59:09 +0000187 if 'message-id' in myMessage:
188 print('Message-ID:', myMessage['message-id'])
Georg Brandl116aa622007-08-15 14:28:22 +0000189
190
Benjamin Petersone41251e2008-04-25 01:59:09 +0000191 .. method:: __getitem__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000192
Benjamin Petersone41251e2008-04-25 01:59:09 +0000193 Return the value of the named header field. *name* should not include the
194 colon field separator. If the header is missing, ``None`` is returned; a
195 :exc:`KeyError` is never raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000196
Benjamin Petersone41251e2008-04-25 01:59:09 +0000197 Note that if the named field appears more than once in the message's
198 headers, exactly which of those field values will be returned is
199 undefined. Use the :meth:`get_all` method to get the values of all the
200 extant named headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000201
202
Benjamin Petersone41251e2008-04-25 01:59:09 +0000203 .. method:: __setitem__(name, val)
Georg Brandl116aa622007-08-15 14:28:22 +0000204
Benjamin Petersone41251e2008-04-25 01:59:09 +0000205 Add a header to the message with field name *name* and value *val*. The
206 field is appended to the end of the message's existing fields.
Georg Brandl116aa622007-08-15 14:28:22 +0000207
Benjamin Petersone41251e2008-04-25 01:59:09 +0000208 Note that this does *not* overwrite or delete any existing header with the same
209 name. If you want to ensure that the new header is the only one present in the
210 message with field name *name*, delete the field first, e.g.::
Georg Brandl116aa622007-08-15 14:28:22 +0000211
Benjamin Petersone41251e2008-04-25 01:59:09 +0000212 del msg['subject']
213 msg['subject'] = 'Python roolz!'
Georg Brandl116aa622007-08-15 14:28:22 +0000214
215
Benjamin Petersone41251e2008-04-25 01:59:09 +0000216 .. method:: __delitem__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000217
Benjamin Petersone41251e2008-04-25 01:59:09 +0000218 Delete all occurrences of the field with name *name* from the message's
Georg Brandl3f076d82009-05-17 11:28:33 +0000219 headers. No exception is raised if the named field isn't present in the
220 headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000221
222
Benjamin Petersone41251e2008-04-25 01:59:09 +0000223 .. method:: Message.__contains__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000224
Benjamin Petersone41251e2008-04-25 01:59:09 +0000225 Return true if the message contains a header field named *name*, otherwise
226 return false.
Georg Brandl116aa622007-08-15 14:28:22 +0000227
228
Benjamin Petersone41251e2008-04-25 01:59:09 +0000229 .. method:: keys()
Georg Brandl116aa622007-08-15 14:28:22 +0000230
Benjamin Petersone41251e2008-04-25 01:59:09 +0000231 Return a list of all the message's header field names.
Georg Brandl116aa622007-08-15 14:28:22 +0000232
233
Benjamin Petersone41251e2008-04-25 01:59:09 +0000234 .. method:: values()
Georg Brandl116aa622007-08-15 14:28:22 +0000235
Benjamin Petersone41251e2008-04-25 01:59:09 +0000236 Return a list of all the message's field values.
Georg Brandl116aa622007-08-15 14:28:22 +0000237
238
Benjamin Petersone41251e2008-04-25 01:59:09 +0000239 .. method:: items()
Georg Brandl116aa622007-08-15 14:28:22 +0000240
Benjamin Petersone41251e2008-04-25 01:59:09 +0000241 Return a list of 2-tuples containing all the message's field headers and
242 values.
Georg Brandl116aa622007-08-15 14:28:22 +0000243
244
Georg Brandl3f076d82009-05-17 11:28:33 +0000245 .. method:: get(name, failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000246
Benjamin Petersone41251e2008-04-25 01:59:09 +0000247 Return the value of the named header field. This is identical to
248 :meth:`__getitem__` except that optional *failobj* is returned if the
249 named header is missing (defaults to ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000250
Benjamin Petersone41251e2008-04-25 01:59:09 +0000251 Here are some additional useful methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000252
253
Georg Brandl3f076d82009-05-17 11:28:33 +0000254 .. method:: get_all(name, failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000255
Benjamin Petersone41251e2008-04-25 01:59:09 +0000256 Return a list of all the values for the field named *name*. If there are
257 no such named headers in the message, *failobj* is returned (defaults to
258 ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000259
260
Benjamin Petersone41251e2008-04-25 01:59:09 +0000261 .. method:: add_header(_name, _value, **_params)
Georg Brandl116aa622007-08-15 14:28:22 +0000262
Benjamin Petersone41251e2008-04-25 01:59:09 +0000263 Extended header setting. This method is similar to :meth:`__setitem__`
264 except that additional header parameters can be provided as keyword
265 arguments. *_name* is the header field to add and *_value* is the
266 *primary* value for the header.
Georg Brandl116aa622007-08-15 14:28:22 +0000267
Benjamin Petersone41251e2008-04-25 01:59:09 +0000268 For each item in the keyword argument dictionary *_params*, the key is
269 taken as the parameter name, with underscores converted to dashes (since
270 dashes are illegal in Python identifiers). Normally, the parameter will
271 be added as ``key="value"`` unless the value is ``None``, in which case
272 only the key will be added.
Georg Brandl116aa622007-08-15 14:28:22 +0000273
Benjamin Petersone41251e2008-04-25 01:59:09 +0000274 Here's an example::
Georg Brandl116aa622007-08-15 14:28:22 +0000275
Benjamin Petersone41251e2008-04-25 01:59:09 +0000276 msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')
Georg Brandl116aa622007-08-15 14:28:22 +0000277
Benjamin Petersone41251e2008-04-25 01:59:09 +0000278 This will add a header that looks like ::
Georg Brandl116aa622007-08-15 14:28:22 +0000279
Benjamin Petersone41251e2008-04-25 01:59:09 +0000280 Content-Disposition: attachment; filename="bud.gif"
Georg Brandl116aa622007-08-15 14:28:22 +0000281
282
Benjamin Petersone41251e2008-04-25 01:59:09 +0000283 .. method:: replace_header(_name, _value)
Georg Brandl116aa622007-08-15 14:28:22 +0000284
Benjamin Petersone41251e2008-04-25 01:59:09 +0000285 Replace a header. Replace the first header found in the message that
286 matches *_name*, retaining header order and field name case. If no
287 matching header was found, a :exc:`KeyError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000288
Georg Brandl116aa622007-08-15 14:28:22 +0000289
Benjamin Petersone41251e2008-04-25 01:59:09 +0000290 .. method:: get_content_type()
Georg Brandl116aa622007-08-15 14:28:22 +0000291
Benjamin Petersone41251e2008-04-25 01:59:09 +0000292 Return the message's content type. The returned string is coerced to
293 lower case of the form :mimetype:`maintype/subtype`. If there was no
294 :mailheader:`Content-Type` header in the message the default type as given
295 by :meth:`get_default_type` will be returned. Since according to
296 :rfc:`2045`, messages always have a default type, :meth:`get_content_type`
297 will always return a value.
Georg Brandl116aa622007-08-15 14:28:22 +0000298
Benjamin Petersone41251e2008-04-25 01:59:09 +0000299 :rfc:`2045` defines a message's default type to be :mimetype:`text/plain`
300 unless it appears inside a :mimetype:`multipart/digest` container, in
301 which case it would be :mimetype:`message/rfc822`. If the
302 :mailheader:`Content-Type` header has an invalid type specification,
303 :rfc:`2045` mandates that the default type be :mimetype:`text/plain`.
Georg Brandl116aa622007-08-15 14:28:22 +0000304
Georg Brandl116aa622007-08-15 14:28:22 +0000305
Benjamin Petersone41251e2008-04-25 01:59:09 +0000306 .. method:: get_content_maintype()
Georg Brandl116aa622007-08-15 14:28:22 +0000307
Benjamin Petersone41251e2008-04-25 01:59:09 +0000308 Return the message's main content type. This is the :mimetype:`maintype`
309 part of the string returned by :meth:`get_content_type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000310
Georg Brandl116aa622007-08-15 14:28:22 +0000311
Benjamin Petersone41251e2008-04-25 01:59:09 +0000312 .. method:: get_content_subtype()
Georg Brandl116aa622007-08-15 14:28:22 +0000313
Benjamin Petersone41251e2008-04-25 01:59:09 +0000314 Return the message's sub-content type. This is the :mimetype:`subtype`
315 part of the string returned by :meth:`get_content_type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000316
Georg Brandl116aa622007-08-15 14:28:22 +0000317
Benjamin Petersone41251e2008-04-25 01:59:09 +0000318 .. method:: get_default_type()
Georg Brandl116aa622007-08-15 14:28:22 +0000319
Benjamin Petersone41251e2008-04-25 01:59:09 +0000320 Return the default content type. Most messages have a default content
321 type of :mimetype:`text/plain`, except for messages that are subparts of
322 :mimetype:`multipart/digest` containers. Such subparts have a default
323 content type of :mimetype:`message/rfc822`.
Georg Brandl116aa622007-08-15 14:28:22 +0000324
Georg Brandl116aa622007-08-15 14:28:22 +0000325
Benjamin Petersone41251e2008-04-25 01:59:09 +0000326 .. method:: set_default_type(ctype)
Georg Brandl116aa622007-08-15 14:28:22 +0000327
Benjamin Petersone41251e2008-04-25 01:59:09 +0000328 Set the default content type. *ctype* should either be
329 :mimetype:`text/plain` or :mimetype:`message/rfc822`, although this is not
330 enforced. The default content type is not stored in the
331 :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000332
Georg Brandl116aa622007-08-15 14:28:22 +0000333
Georg Brandl3f076d82009-05-17 11:28:33 +0000334 .. method:: get_params(failobj=None, header='content-type', unquote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000335
Benjamin Petersone41251e2008-04-25 01:59:09 +0000336 Return the message's :mailheader:`Content-Type` parameters, as a list.
337 The elements of the returned list are 2-tuples of key/value pairs, as
338 split on the ``'='`` sign. The left hand side of the ``'='`` is the key,
339 while the right hand side is the value. If there is no ``'='`` sign in
340 the parameter the value is the empty string, otherwise the value is as
341 described in :meth:`get_param` and is unquoted if optional *unquote* is
342 ``True`` (the default).
Georg Brandl116aa622007-08-15 14:28:22 +0000343
Benjamin Petersone41251e2008-04-25 01:59:09 +0000344 Optional *failobj* is the object to return if there is no
345 :mailheader:`Content-Type` header. Optional *header* is the header to
346 search instead of :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000347
Georg Brandl116aa622007-08-15 14:28:22 +0000348
Georg Brandl3f076d82009-05-17 11:28:33 +0000349 .. method:: get_param(param, failobj=None, header='content-type', unquote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000350
Benjamin Petersone41251e2008-04-25 01:59:09 +0000351 Return the value of the :mailheader:`Content-Type` header's parameter
352 *param* as a string. If the message has no :mailheader:`Content-Type`
353 header or if there is no such parameter, then *failobj* is returned
354 (defaults to ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000355
Benjamin Petersone41251e2008-04-25 01:59:09 +0000356 Optional *header* if given, specifies the message header to use instead of
357 :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000358
Benjamin Petersone41251e2008-04-25 01:59:09 +0000359 Parameter keys are always compared case insensitively. The return value
360 can either be a string, or a 3-tuple if the parameter was :rfc:`2231`
361 encoded. When it's a 3-tuple, the elements of the value are of the form
362 ``(CHARSET, LANGUAGE, VALUE)``. Note that both ``CHARSET`` and
363 ``LANGUAGE`` can be ``None``, in which case you should consider ``VALUE``
364 to be encoded in the ``us-ascii`` charset. You can usually ignore
365 ``LANGUAGE``.
Georg Brandl116aa622007-08-15 14:28:22 +0000366
Benjamin Petersone41251e2008-04-25 01:59:09 +0000367 If your application doesn't care whether the parameter was encoded as in
368 :rfc:`2231`, you can collapse the parameter value by calling
Georg Brandl540b45c2009-04-27 16:45:26 +0000369 :func:`email.utils.collapse_rfc2231_value`, passing in the return value
Benjamin Petersone41251e2008-04-25 01:59:09 +0000370 from :meth:`get_param`. This will return a suitably decoded Unicode
371 string whn the value is a tuple, or the original string unquoted if it
372 isn't. For example::
Georg Brandl116aa622007-08-15 14:28:22 +0000373
Benjamin Petersone41251e2008-04-25 01:59:09 +0000374 rawparam = msg.get_param('foo')
Georg Brandl540b45c2009-04-27 16:45:26 +0000375 param = email.utils.collapse_rfc2231_value(rawparam)
Georg Brandl116aa622007-08-15 14:28:22 +0000376
Benjamin Petersone41251e2008-04-25 01:59:09 +0000377 In any case, the parameter value (either the returned string, or the
378 ``VALUE`` item in the 3-tuple) is always unquoted, unless *unquote* is set
379 to ``False``.
Georg Brandl116aa622007-08-15 14:28:22 +0000380
Georg Brandl116aa622007-08-15 14:28:22 +0000381
Georg Brandl3f076d82009-05-17 11:28:33 +0000382 .. method:: set_param(param, value, header='Content-Type', requote=True, charset=None, language='')
Georg Brandl116aa622007-08-15 14:28:22 +0000383
Benjamin Petersone41251e2008-04-25 01:59:09 +0000384 Set a parameter in the :mailheader:`Content-Type` header. If the
385 parameter already exists in the header, its value will be replaced with
386 *value*. If the :mailheader:`Content-Type` header as not yet been defined
387 for this message, it will be set to :mimetype:`text/plain` and the new
388 parameter value will be appended as per :rfc:`2045`.
Georg Brandl116aa622007-08-15 14:28:22 +0000389
Benjamin Petersone41251e2008-04-25 01:59:09 +0000390 Optional *header* specifies an alternative header to
391 :mailheader:`Content-Type`, and all parameters will be quoted as necessary
392 unless optional *requote* is ``False`` (the default is ``True``).
Georg Brandl116aa622007-08-15 14:28:22 +0000393
Benjamin Petersone41251e2008-04-25 01:59:09 +0000394 If optional *charset* is specified, the parameter will be encoded
395 according to :rfc:`2231`. Optional *language* specifies the RFC 2231
396 language, defaulting to the empty string. Both *charset* and *language*
397 should be strings.
Georg Brandl116aa622007-08-15 14:28:22 +0000398
Georg Brandl116aa622007-08-15 14:28:22 +0000399
Georg Brandl3f076d82009-05-17 11:28:33 +0000400 .. method:: del_param(param, header='content-type', requote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000401
Benjamin Petersone41251e2008-04-25 01:59:09 +0000402 Remove the given parameter completely from the :mailheader:`Content-Type`
403 header. The header will be re-written in place without the parameter or
404 its value. All values will be quoted as necessary unless *requote* is
405 ``False`` (the default is ``True``). Optional *header* specifies an
406 alternative to :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000407
Georg Brandl116aa622007-08-15 14:28:22 +0000408
Georg Brandl3f076d82009-05-17 11:28:33 +0000409 .. method:: set_type(type, header='Content-Type', requote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000410
Benjamin Petersone41251e2008-04-25 01:59:09 +0000411 Set the main type and subtype for the :mailheader:`Content-Type`
412 header. *type* must be a string in the form :mimetype:`maintype/subtype`,
413 otherwise a :exc:`ValueError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000414
Benjamin Petersone41251e2008-04-25 01:59:09 +0000415 This method replaces the :mailheader:`Content-Type` header, keeping all
416 the parameters in place. If *requote* is ``False``, this leaves the
417 existing header's quoting as is, otherwise the parameters will be quoted
418 (the default).
Georg Brandl116aa622007-08-15 14:28:22 +0000419
Benjamin Petersone41251e2008-04-25 01:59:09 +0000420 An alternative header can be specified in the *header* argument. When the
421 :mailheader:`Content-Type` header is set a :mailheader:`MIME-Version`
422 header is also added.
Georg Brandl116aa622007-08-15 14:28:22 +0000423
Georg Brandl116aa622007-08-15 14:28:22 +0000424
Georg Brandl3f076d82009-05-17 11:28:33 +0000425 .. method:: get_filename(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000426
Benjamin Petersone41251e2008-04-25 01:59:09 +0000427 Return the value of the ``filename`` parameter of the
428 :mailheader:`Content-Disposition` header of the message. If the header
429 does not have a ``filename`` parameter, this method falls back to looking
R. David Murray9ed34be2010-03-04 17:38:18 +0000430 for the ``name`` parameter on the :mailheader:`Content-Type` header. If
431 neither is found, or the header is missing, then *failobj* is returned.
432 The returned string will always be unquoted as per
433 :func:`email.utils.unquote`.
Georg Brandl116aa622007-08-15 14:28:22 +0000434
435
Georg Brandl3f076d82009-05-17 11:28:33 +0000436 .. method:: get_boundary(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000437
Benjamin Petersone41251e2008-04-25 01:59:09 +0000438 Return the value of the ``boundary`` parameter of the
439 :mailheader:`Content-Type` header of the message, or *failobj* if either
440 the header is missing, or has no ``boundary`` parameter. The returned
Georg Brandl540b45c2009-04-27 16:45:26 +0000441 string will always be unquoted as per :func:`email.utils.unquote`.
Georg Brandl116aa622007-08-15 14:28:22 +0000442
443
Benjamin Petersone41251e2008-04-25 01:59:09 +0000444 .. method:: set_boundary(boundary)
Georg Brandl116aa622007-08-15 14:28:22 +0000445
Benjamin Petersone41251e2008-04-25 01:59:09 +0000446 Set the ``boundary`` parameter of the :mailheader:`Content-Type` header to
447 *boundary*. :meth:`set_boundary` will always quote *boundary* if
448 necessary. A :exc:`HeaderParseError` is raised if the message object has
449 no :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000450
Benjamin Petersone41251e2008-04-25 01:59:09 +0000451 Note that using this method is subtly different than deleting the old
452 :mailheader:`Content-Type` header and adding a new one with the new
453 boundary via :meth:`add_header`, because :meth:`set_boundary` preserves
454 the order of the :mailheader:`Content-Type` header in the list of
455 headers. However, it does *not* preserve any continuation lines which may
456 have been present in the original :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000457
458
Georg Brandl3f076d82009-05-17 11:28:33 +0000459 .. method:: get_content_charset(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000460
Benjamin Petersone41251e2008-04-25 01:59:09 +0000461 Return the ``charset`` parameter of the :mailheader:`Content-Type` header,
462 coerced to lower case. If there is no :mailheader:`Content-Type` header, or if
463 that header has no ``charset`` parameter, *failobj* is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000464
Benjamin Petersone41251e2008-04-25 01:59:09 +0000465 Note that this method differs from :meth:`get_charset` which returns the
Georg Brandl3638e482009-04-27 16:46:17 +0000466 :class:`~email.charset.Charset` instance for the default encoding of the message body.
Georg Brandl116aa622007-08-15 14:28:22 +0000467
Georg Brandl116aa622007-08-15 14:28:22 +0000468
Georg Brandl3f076d82009-05-17 11:28:33 +0000469 .. method:: get_charsets(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000470
Benjamin Petersone41251e2008-04-25 01:59:09 +0000471 Return a list containing the character set names in the message. If the
472 message is a :mimetype:`multipart`, then the list will contain one element
473 for each subpart in the payload, otherwise, it will be a list of length 1.
Georg Brandl116aa622007-08-15 14:28:22 +0000474
Benjamin Petersone41251e2008-04-25 01:59:09 +0000475 Each item in the list will be a string which is the value of the
476 ``charset`` parameter in the :mailheader:`Content-Type` header for the
477 represented subpart. However, if the subpart has no
478 :mailheader:`Content-Type` header, no ``charset`` parameter, or is not of
479 the :mimetype:`text` main MIME type, then that item in the returned list
480 will be *failobj*.
Georg Brandl116aa622007-08-15 14:28:22 +0000481
482
Benjamin Petersone41251e2008-04-25 01:59:09 +0000483 .. method:: walk()
Georg Brandl116aa622007-08-15 14:28:22 +0000484
Benjamin Petersone41251e2008-04-25 01:59:09 +0000485 The :meth:`walk` method is an all-purpose generator which can be used to
486 iterate over all the parts and subparts of a message object tree, in
487 depth-first traversal order. You will typically use :meth:`walk` as the
488 iterator in a ``for`` loop; each iteration returns the next subpart.
Georg Brandl116aa622007-08-15 14:28:22 +0000489
Benjamin Petersone41251e2008-04-25 01:59:09 +0000490 Here's an example that prints the MIME type of every part of a multipart
491 message structure::
Georg Brandl116aa622007-08-15 14:28:22 +0000492
Benjamin Petersone41251e2008-04-25 01:59:09 +0000493 >>> 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
Georg Brandl116aa622007-08-15 14:28:22 +0000501
Benjamin Petersone41251e2008-04-25 01:59:09 +0000502 :class:`Message` objects can also optionally contain two instance attributes,
503 which can be used when generating the plain text of a MIME message.
Georg Brandl116aa622007-08-15 14:28:22 +0000504
505
Benjamin Petersone41251e2008-04-25 01:59:09 +0000506 .. attribute:: preamble
Georg Brandl116aa622007-08-15 14:28:22 +0000507
Benjamin Petersone41251e2008-04-25 01:59:09 +0000508 The format of a MIME document allows for some text between the blank line
509 following the headers, and the first multipart boundary string. Normally,
510 this text is never visible in a MIME-aware mail reader because it falls
511 outside the standard MIME armor. However, when viewing the raw text of
512 the message, or when viewing the message in a non-MIME aware reader, this
513 text can become visible.
Georg Brandl116aa622007-08-15 14:28:22 +0000514
Benjamin Petersone41251e2008-04-25 01:59:09 +0000515 The *preamble* attribute contains this leading extra-armor text for MIME
Georg Brandl3638e482009-04-27 16:46:17 +0000516 documents. When the :class:`~email.parser.Parser` discovers some text
517 after the headers but before the first boundary string, it assigns this
518 text to the message's *preamble* attribute. When the
519 :class:`~email.generator.Generator` is writing out the plain text
520 representation of a MIME message, and it finds the
Benjamin Petersone41251e2008-04-25 01:59:09 +0000521 message has a *preamble* attribute, it will write this text in the area
522 between the headers and the first boundary. See :mod:`email.parser` and
523 :mod:`email.generator` for details.
Georg Brandl116aa622007-08-15 14:28:22 +0000524
Benjamin Petersone41251e2008-04-25 01:59:09 +0000525 Note that if the message object has no preamble, the *preamble* attribute
526 will be ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000527
528
Benjamin Petersone41251e2008-04-25 01:59:09 +0000529 .. attribute:: epilogue
Georg Brandl116aa622007-08-15 14:28:22 +0000530
Benjamin Petersone41251e2008-04-25 01:59:09 +0000531 The *epilogue* attribute acts the same way as the *preamble* attribute,
532 except that it contains text that appears between the last boundary and
533 the end of the message.
Georg Brandl116aa622007-08-15 14:28:22 +0000534
Benjamin Petersone41251e2008-04-25 01:59:09 +0000535 You do not need to set the epilogue to the empty string in order for the
536 :class:`Generator` to print a newline at the end of the file.
Georg Brandl116aa622007-08-15 14:28:22 +0000537
538
Benjamin Petersone41251e2008-04-25 01:59:09 +0000539 .. attribute:: defects
Georg Brandl116aa622007-08-15 14:28:22 +0000540
Benjamin Petersone41251e2008-04-25 01:59:09 +0000541 The *defects* attribute contains a list of all the problems found when
542 parsing this message. See :mod:`email.errors` for a detailed description
543 of the possible parsing defects.