blob: 29f7ba3455dd189e5f9bcb445360558fa72cbb69 [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
Senthil Kumaran82270452010-10-15 13:29:33 +0000121 to decode the original bytes using the ``charset`` specified by the
122 :mailheader:`Content-Type` header, using the ``replace`` error handler.
123 If no ``charset`` is specified, or if the ``charset`` given is not
124 recognized by the email package, the body is decoded using the default
125 ASCII charset.
Georg Brandl116aa622007-08-15 14:28:22 +0000126
127
Georg Brandl3f076d82009-05-17 11:28:33 +0000128 .. method:: set_payload(payload, charset=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000129
Benjamin Petersone41251e2008-04-25 01:59:09 +0000130 Set the entire message object's payload to *payload*. It is the client's
131 responsibility to ensure the payload invariants. Optional *charset* sets
132 the message's default character set; see :meth:`set_charset` for details.
Georg Brandl116aa622007-08-15 14:28:22 +0000133
Benjamin Petersone41251e2008-04-25 01:59:09 +0000134 .. method:: set_charset(charset)
Georg Brandl116aa622007-08-15 14:28:22 +0000135
Benjamin Petersone41251e2008-04-25 01:59:09 +0000136 Set the character set of the payload to *charset*, which can either be a
Georg Brandl3638e482009-04-27 16:46:17 +0000137 :class:`~email.charset.Charset` instance (see :mod:`email.charset`), a
138 string naming a character set, or ``None``. If it is a string, it will
139 be converted to a :class:`~email.charset.Charset` instance. If *charset*
140 is ``None``, the ``charset`` parameter will be removed from the
141 :mailheader:`Content-Type` header. Anything else will generate a
142 :exc:`TypeError`.
Georg Brandl116aa622007-08-15 14:28:22 +0000143
Benjamin Petersone41251e2008-04-25 01:59:09 +0000144 The message will be assumed to be of type :mimetype:`text/\*` encoded with
145 *charset.input_charset*. It will be converted to *charset.output_charset*
146 and encoded properly, if needed, when generating the plain text
147 representation of the message. MIME headers (:mailheader:`MIME-Version`,
148 :mailheader:`Content-Type`, :mailheader:`Content-Transfer-Encoding`) will
149 be added as needed.
Georg Brandl116aa622007-08-15 14:28:22 +0000150
Benjamin Petersone41251e2008-04-25 01:59:09 +0000151 .. method:: get_charset()
Georg Brandl116aa622007-08-15 14:28:22 +0000152
Georg Brandl3638e482009-04-27 16:46:17 +0000153 Return the :class:`~email.charset.Charset` instance associated with the
154 message's payload.
Georg Brandl116aa622007-08-15 14:28:22 +0000155
Benjamin Petersone41251e2008-04-25 01:59:09 +0000156 The following methods implement a mapping-like interface for accessing the
157 message's :rfc:`2822` 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 a :class:`Message` object,
162 headers are always returned in the order they appeared in the original
163 message, or were added to the message later. Any header deleted and then
164 re-added are always appended to the end of the header list.
Georg Brandl116aa622007-08-15 14:28:22 +0000165
Benjamin Petersone41251e2008-04-25 01:59:09 +0000166 These semantic differences are intentional and are biased toward maximal
167 convenience.
Georg Brandl116aa622007-08-15 14:28:22 +0000168
Benjamin Petersone41251e2008-04-25 01:59:09 +0000169 Note that in all cases, any envelope header present in the message is not
170 included in the mapping interface.
Georg Brandl116aa622007-08-15 14:28:22 +0000171
R. David Murray92532142011-01-07 23:25:30 +0000172 In a model generated from bytes, any header values that (in contravention of
173 the RFCs) contain non-ASCII bytes will, when retrieved through this
174 interface, be represented as :class:`~email.header.Header` objects with
175 a charset of `unknown-8bit`.
R. David Murray96fd54e2010-10-08 15:55:28 +0000176
Georg Brandl116aa622007-08-15 14:28:22 +0000177
Benjamin Petersone41251e2008-04-25 01:59:09 +0000178 .. method:: __len__()
Georg Brandl116aa622007-08-15 14:28:22 +0000179
Benjamin Petersone41251e2008-04-25 01:59:09 +0000180 Return the total number of headers, including duplicates.
Georg Brandl116aa622007-08-15 14:28:22 +0000181
182
Benjamin Petersone41251e2008-04-25 01:59:09 +0000183 .. method:: __contains__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000184
Benjamin Petersone41251e2008-04-25 01:59:09 +0000185 Return true if the message object has a field named *name*. Matching is
186 done case-insensitively and *name* should not include the trailing colon.
187 Used for the ``in`` operator, e.g.::
Georg Brandl116aa622007-08-15 14:28:22 +0000188
Benjamin Petersone41251e2008-04-25 01:59:09 +0000189 if 'message-id' in myMessage:
190 print('Message-ID:', myMessage['message-id'])
Georg Brandl116aa622007-08-15 14:28:22 +0000191
192
Benjamin Petersone41251e2008-04-25 01:59:09 +0000193 .. method:: __getitem__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000194
Benjamin Petersone41251e2008-04-25 01:59:09 +0000195 Return the value of the named header field. *name* should not include the
196 colon field separator. If the header is missing, ``None`` is returned; a
197 :exc:`KeyError` is never raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000198
Benjamin Petersone41251e2008-04-25 01:59:09 +0000199 Note that if the named field appears more than once in the message's
200 headers, exactly which of those field values will be returned is
201 undefined. Use the :meth:`get_all` method to get the values of all the
202 extant named headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000203
204
Benjamin Petersone41251e2008-04-25 01:59:09 +0000205 .. method:: __setitem__(name, val)
Georg Brandl116aa622007-08-15 14:28:22 +0000206
Benjamin Petersone41251e2008-04-25 01:59:09 +0000207 Add a header to the message with field name *name* and value *val*. The
208 field is appended to the end of the message's existing fields.
Georg Brandl116aa622007-08-15 14:28:22 +0000209
Benjamin Petersone41251e2008-04-25 01:59:09 +0000210 Note that this does *not* overwrite or delete any existing header with the same
211 name. If you want to ensure that the new header is the only one present in the
212 message with field name *name*, delete the field first, e.g.::
Georg Brandl116aa622007-08-15 14:28:22 +0000213
Benjamin Petersone41251e2008-04-25 01:59:09 +0000214 del msg['subject']
215 msg['subject'] = 'Python roolz!'
Georg Brandl116aa622007-08-15 14:28:22 +0000216
217
Benjamin Petersone41251e2008-04-25 01:59:09 +0000218 .. method:: __delitem__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000219
Benjamin Petersone41251e2008-04-25 01:59:09 +0000220 Delete all occurrences of the field with name *name* from the message's
Georg Brandl3f076d82009-05-17 11:28:33 +0000221 headers. No exception is raised if the named field isn't present in the
222 headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000223
224
Benjamin Petersone41251e2008-04-25 01:59:09 +0000225 .. method:: Message.__contains__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000226
Benjamin Petersone41251e2008-04-25 01:59:09 +0000227 Return true if the message contains a header field named *name*, otherwise
228 return false.
Georg Brandl116aa622007-08-15 14:28:22 +0000229
230
Benjamin Petersone41251e2008-04-25 01:59:09 +0000231 .. method:: keys()
Georg Brandl116aa622007-08-15 14:28:22 +0000232
Benjamin Petersone41251e2008-04-25 01:59:09 +0000233 Return a list of all the message's header field names.
Georg Brandl116aa622007-08-15 14:28:22 +0000234
235
Benjamin Petersone41251e2008-04-25 01:59:09 +0000236 .. method:: values()
Georg Brandl116aa622007-08-15 14:28:22 +0000237
Benjamin Petersone41251e2008-04-25 01:59:09 +0000238 Return a list of all the message's field values.
Georg Brandl116aa622007-08-15 14:28:22 +0000239
240
Benjamin Petersone41251e2008-04-25 01:59:09 +0000241 .. method:: items()
Georg Brandl116aa622007-08-15 14:28:22 +0000242
Benjamin Petersone41251e2008-04-25 01:59:09 +0000243 Return a list of 2-tuples containing all the message's field headers and
244 values.
Georg Brandl116aa622007-08-15 14:28:22 +0000245
246
Georg Brandl3f076d82009-05-17 11:28:33 +0000247 .. method:: get(name, failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000248
Benjamin Petersone41251e2008-04-25 01:59:09 +0000249 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 (defaults to ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000252
Benjamin Petersone41251e2008-04-25 01:59:09 +0000253 Here are some additional useful methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000254
255
Georg Brandl3f076d82009-05-17 11:28:33 +0000256 .. method:: get_all(name, failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000257
Benjamin Petersone41251e2008-04-25 01:59:09 +0000258 Return a list of all the values for the field named *name*. If there are
259 no such named headers in the message, *failobj* is returned (defaults to
260 ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000261
262
Benjamin Petersone41251e2008-04-25 01:59:09 +0000263 .. method:: add_header(_name, _value, **_params)
Georg Brandl116aa622007-08-15 14:28:22 +0000264
Benjamin Petersone41251e2008-04-25 01:59:09 +0000265 Extended header setting. This method is similar to :meth:`__setitem__`
266 except that additional header parameters can be provided as keyword
267 arguments. *_name* is the header field to add and *_value* is the
268 *primary* value for the header.
Georg Brandl116aa622007-08-15 14:28:22 +0000269
Benjamin Petersone41251e2008-04-25 01:59:09 +0000270 For each item in the keyword argument dictionary *_params*, the key is
271 taken as the parameter name, with underscores converted to dashes (since
272 dashes are illegal in Python identifiers). Normally, the parameter will
273 be added as ``key="value"`` unless the value is ``None``, in which case
R. David Murray7ec754b2010-12-13 23:51:19 +0000274 only the key will be added. If the value contains non-ASCII characters,
275 it can be specified as a three tuple in the format
276 ``(CHARSET, LANGUAGE, VALUE)``, where ``CHARSET`` is a string naming the
277 charset to be used to encode the value, ``LANGUAGE`` can usually be set
Georg Brandlc8843502010-12-19 10:28:46 +0000278 to ``None`` or the empty string (see :rfc:`2231` for other possibilities),
R. David Murray7ec754b2010-12-13 23:51:19 +0000279 and ``VALUE`` is the string value containing non-ASCII code points. If
280 a three tuple is not passed and the value contains non-ASCII characters,
Georg Brandlc8843502010-12-19 10:28:46 +0000281 it is automatically encoded in :rfc:`2231` format using a ``CHARSET``
R. David Murray7ec754b2010-12-13 23:51:19 +0000282 of ``utf-8`` and a ``LANGUAGE`` of ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000283
Benjamin Petersone41251e2008-04-25 01:59:09 +0000284 Here's an example::
Georg Brandl116aa622007-08-15 14:28:22 +0000285
Benjamin Petersone41251e2008-04-25 01:59:09 +0000286 msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')
Georg Brandl116aa622007-08-15 14:28:22 +0000287
Benjamin Petersone41251e2008-04-25 01:59:09 +0000288 This will add a header that looks like ::
Georg Brandl116aa622007-08-15 14:28:22 +0000289
Benjamin Petersone41251e2008-04-25 01:59:09 +0000290 Content-Disposition: attachment; filename="bud.gif"
Georg Brandl116aa622007-08-15 14:28:22 +0000291
R. David Murray7ec754b2010-12-13 23:51:19 +0000292 An example with with non-ASCII characters::
293
294 msg.add_header('Content-Disposition', 'attachment',
295 filename=('iso-8859-1', '', 'Fußballer.ppt'))
296
297 Which produces ::
298
299 Content-Disposition: attachment; filename*="iso-8859-1''Fu%DFballer.ppt"
300
Georg Brandl116aa622007-08-15 14:28:22 +0000301
Benjamin Petersone41251e2008-04-25 01:59:09 +0000302 .. method:: replace_header(_name, _value)
Georg Brandl116aa622007-08-15 14:28:22 +0000303
Benjamin Petersone41251e2008-04-25 01:59:09 +0000304 Replace a header. Replace the first header found in the message that
305 matches *_name*, retaining header order and field name case. If no
306 matching header was found, a :exc:`KeyError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000307
Georg Brandl116aa622007-08-15 14:28:22 +0000308
Benjamin Petersone41251e2008-04-25 01:59:09 +0000309 .. method:: get_content_type()
Georg Brandl116aa622007-08-15 14:28:22 +0000310
Benjamin Petersone41251e2008-04-25 01:59:09 +0000311 Return the message's content type. The returned string is coerced to
312 lower case of the form :mimetype:`maintype/subtype`. If there was no
313 :mailheader:`Content-Type` header in the message the default type as given
314 by :meth:`get_default_type` will be returned. Since according to
315 :rfc:`2045`, messages always have a default type, :meth:`get_content_type`
316 will always return a value.
Georg Brandl116aa622007-08-15 14:28:22 +0000317
Benjamin Petersone41251e2008-04-25 01:59:09 +0000318 :rfc:`2045` defines a message's default type to be :mimetype:`text/plain`
319 unless it appears inside a :mimetype:`multipart/digest` container, in
320 which case it would be :mimetype:`message/rfc822`. If the
321 :mailheader:`Content-Type` header has an invalid type specification,
322 :rfc:`2045` mandates that the default type be :mimetype:`text/plain`.
Georg Brandl116aa622007-08-15 14:28:22 +0000323
Georg Brandl116aa622007-08-15 14:28:22 +0000324
Benjamin Petersone41251e2008-04-25 01:59:09 +0000325 .. method:: get_content_maintype()
Georg Brandl116aa622007-08-15 14:28:22 +0000326
Benjamin Petersone41251e2008-04-25 01:59:09 +0000327 Return the message's main content type. This is the :mimetype:`maintype`
328 part of the string returned by :meth:`get_content_type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000329
Georg Brandl116aa622007-08-15 14:28:22 +0000330
Benjamin Petersone41251e2008-04-25 01:59:09 +0000331 .. method:: get_content_subtype()
Georg Brandl116aa622007-08-15 14:28:22 +0000332
Benjamin Petersone41251e2008-04-25 01:59:09 +0000333 Return the message's sub-content type. This is the :mimetype:`subtype`
334 part of the string returned by :meth:`get_content_type`.
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_default_type()
Georg Brandl116aa622007-08-15 14:28:22 +0000338
Benjamin Petersone41251e2008-04-25 01:59:09 +0000339 Return the default content type. Most messages have a default content
340 type of :mimetype:`text/plain`, except for messages that are subparts of
341 :mimetype:`multipart/digest` containers. Such subparts have a default
342 content type of :mimetype:`message/rfc822`.
Georg Brandl116aa622007-08-15 14:28:22 +0000343
Georg Brandl116aa622007-08-15 14:28:22 +0000344
Benjamin Petersone41251e2008-04-25 01:59:09 +0000345 .. method:: set_default_type(ctype)
Georg Brandl116aa622007-08-15 14:28:22 +0000346
Benjamin Petersone41251e2008-04-25 01:59:09 +0000347 Set the default content type. *ctype* should either be
348 :mimetype:`text/plain` or :mimetype:`message/rfc822`, although this is not
349 enforced. The default content type is not stored in the
350 :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000351
Georg Brandl116aa622007-08-15 14:28:22 +0000352
Georg Brandl3f076d82009-05-17 11:28:33 +0000353 .. method:: get_params(failobj=None, header='content-type', unquote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000354
Benjamin Petersone41251e2008-04-25 01:59:09 +0000355 Return the message's :mailheader:`Content-Type` parameters, as a list.
356 The elements of the returned list are 2-tuples of key/value pairs, as
357 split on the ``'='`` sign. The left hand side of the ``'='`` is the key,
358 while the right hand side is the value. If there is no ``'='`` sign in
359 the parameter the value is the empty string, otherwise the value is as
360 described in :meth:`get_param` and is unquoted if optional *unquote* is
361 ``True`` (the default).
Georg Brandl116aa622007-08-15 14:28:22 +0000362
Benjamin Petersone41251e2008-04-25 01:59:09 +0000363 Optional *failobj* is the object to return if there is no
364 :mailheader:`Content-Type` header. Optional *header* is the header to
365 search instead of :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000366
Georg Brandl116aa622007-08-15 14:28:22 +0000367
Georg Brandl3f076d82009-05-17 11:28:33 +0000368 .. method:: get_param(param, failobj=None, header='content-type', unquote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000369
Benjamin Petersone41251e2008-04-25 01:59:09 +0000370 Return the value of the :mailheader:`Content-Type` header's parameter
371 *param* as a string. If the message has no :mailheader:`Content-Type`
372 header or if there is no such parameter, then *failobj* is returned
373 (defaults to ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000374
Benjamin Petersone41251e2008-04-25 01:59:09 +0000375 Optional *header* if given, specifies the message header to use instead of
376 :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000377
Benjamin Petersone41251e2008-04-25 01:59:09 +0000378 Parameter keys are always compared case insensitively. The return value
379 can either be a string, or a 3-tuple if the parameter was :rfc:`2231`
380 encoded. When it's a 3-tuple, the elements of the value are of the form
381 ``(CHARSET, LANGUAGE, VALUE)``. Note that both ``CHARSET`` and
382 ``LANGUAGE`` can be ``None``, in which case you should consider ``VALUE``
383 to be encoded in the ``us-ascii`` charset. You can usually ignore
384 ``LANGUAGE``.
Georg Brandl116aa622007-08-15 14:28:22 +0000385
Benjamin Petersone41251e2008-04-25 01:59:09 +0000386 If your application doesn't care whether the parameter was encoded as in
387 :rfc:`2231`, you can collapse the parameter value by calling
Georg Brandl540b45c2009-04-27 16:45:26 +0000388 :func:`email.utils.collapse_rfc2231_value`, passing in the return value
Benjamin Petersone41251e2008-04-25 01:59:09 +0000389 from :meth:`get_param`. This will return a suitably decoded Unicode
R. David Murray7ec754b2010-12-13 23:51:19 +0000390 string when the value is a tuple, or the original string unquoted if it
Benjamin Petersone41251e2008-04-25 01:59:09 +0000391 isn't. For example::
Georg Brandl116aa622007-08-15 14:28:22 +0000392
Benjamin Petersone41251e2008-04-25 01:59:09 +0000393 rawparam = msg.get_param('foo')
Georg Brandl540b45c2009-04-27 16:45:26 +0000394 param = email.utils.collapse_rfc2231_value(rawparam)
Georg Brandl116aa622007-08-15 14:28:22 +0000395
Benjamin Petersone41251e2008-04-25 01:59:09 +0000396 In any case, the parameter value (either the returned string, or the
397 ``VALUE`` item in the 3-tuple) is always unquoted, unless *unquote* is set
398 to ``False``.
Georg Brandl116aa622007-08-15 14:28:22 +0000399
Georg Brandl116aa622007-08-15 14:28:22 +0000400
Georg Brandl3f076d82009-05-17 11:28:33 +0000401 .. method:: set_param(param, value, header='Content-Type', requote=True, charset=None, language='')
Georg Brandl116aa622007-08-15 14:28:22 +0000402
Benjamin Petersone41251e2008-04-25 01:59:09 +0000403 Set a parameter in the :mailheader:`Content-Type` header. If the
404 parameter already exists in the header, its value will be replaced with
405 *value*. If the :mailheader:`Content-Type` header as not yet been defined
406 for this message, it will be set to :mimetype:`text/plain` and the new
407 parameter value will be appended as per :rfc:`2045`.
Georg Brandl116aa622007-08-15 14:28:22 +0000408
Benjamin Petersone41251e2008-04-25 01:59:09 +0000409 Optional *header* specifies an alternative header to
410 :mailheader:`Content-Type`, and all parameters will be quoted as necessary
411 unless optional *requote* is ``False`` (the default is ``True``).
Georg Brandl116aa622007-08-15 14:28:22 +0000412
Benjamin Petersone41251e2008-04-25 01:59:09 +0000413 If optional *charset* is specified, the parameter will be encoded
414 according to :rfc:`2231`. Optional *language* specifies the RFC 2231
415 language, defaulting to the empty string. Both *charset* and *language*
416 should be strings.
Georg Brandl116aa622007-08-15 14:28:22 +0000417
Georg Brandl116aa622007-08-15 14:28:22 +0000418
Georg Brandl3f076d82009-05-17 11:28:33 +0000419 .. method:: del_param(param, header='content-type', requote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000420
Benjamin Petersone41251e2008-04-25 01:59:09 +0000421 Remove the given parameter completely from the :mailheader:`Content-Type`
422 header. The header will be re-written in place without the parameter or
423 its value. All values will be quoted as necessary unless *requote* is
424 ``False`` (the default is ``True``). Optional *header* specifies an
425 alternative to :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000426
Georg Brandl116aa622007-08-15 14:28:22 +0000427
Georg Brandl3f076d82009-05-17 11:28:33 +0000428 .. method:: set_type(type, header='Content-Type', requote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000429
Benjamin Petersone41251e2008-04-25 01:59:09 +0000430 Set the main type and subtype for the :mailheader:`Content-Type`
431 header. *type* must be a string in the form :mimetype:`maintype/subtype`,
432 otherwise a :exc:`ValueError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000433
Benjamin Petersone41251e2008-04-25 01:59:09 +0000434 This method replaces the :mailheader:`Content-Type` header, keeping all
435 the parameters in place. If *requote* is ``False``, this leaves the
436 existing header's quoting as is, otherwise the parameters will be quoted
437 (the default).
Georg Brandl116aa622007-08-15 14:28:22 +0000438
Benjamin Petersone41251e2008-04-25 01:59:09 +0000439 An alternative header can be specified in the *header* argument. When the
440 :mailheader:`Content-Type` header is set a :mailheader:`MIME-Version`
441 header is also added.
Georg Brandl116aa622007-08-15 14:28:22 +0000442
Georg Brandl116aa622007-08-15 14:28:22 +0000443
Georg Brandl3f076d82009-05-17 11:28:33 +0000444 .. method:: get_filename(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000445
Benjamin Petersone41251e2008-04-25 01:59:09 +0000446 Return the value of the ``filename`` parameter of the
447 :mailheader:`Content-Disposition` header of the message. If the header
448 does not have a ``filename`` parameter, this method falls back to looking
R. David Murray9ed34be2010-03-04 17:38:18 +0000449 for the ``name`` parameter on the :mailheader:`Content-Type` header. If
450 neither is found, or the header is missing, then *failobj* is returned.
451 The returned string will always be unquoted as per
452 :func:`email.utils.unquote`.
Georg Brandl116aa622007-08-15 14:28:22 +0000453
454
Georg Brandl3f076d82009-05-17 11:28:33 +0000455 .. method:: get_boundary(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000456
Benjamin Petersone41251e2008-04-25 01:59:09 +0000457 Return the value of the ``boundary`` parameter of the
458 :mailheader:`Content-Type` header of the message, or *failobj* if either
459 the header is missing, or has no ``boundary`` parameter. The returned
Georg Brandl540b45c2009-04-27 16:45:26 +0000460 string will always be unquoted as per :func:`email.utils.unquote`.
Georg Brandl116aa622007-08-15 14:28:22 +0000461
462
Benjamin Petersone41251e2008-04-25 01:59:09 +0000463 .. method:: set_boundary(boundary)
Georg Brandl116aa622007-08-15 14:28:22 +0000464
Benjamin Petersone41251e2008-04-25 01:59:09 +0000465 Set the ``boundary`` parameter of the :mailheader:`Content-Type` header to
466 *boundary*. :meth:`set_boundary` will always quote *boundary* if
467 necessary. A :exc:`HeaderParseError` is raised if the message object has
468 no :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000469
Benjamin Petersone41251e2008-04-25 01:59:09 +0000470 Note that using this method is subtly different than deleting the old
471 :mailheader:`Content-Type` header and adding a new one with the new
472 boundary via :meth:`add_header`, because :meth:`set_boundary` preserves
473 the order of the :mailheader:`Content-Type` header in the list of
474 headers. However, it does *not* preserve any continuation lines which may
475 have been present in the original :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000476
477
Georg Brandl3f076d82009-05-17 11:28:33 +0000478 .. method:: get_content_charset(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000479
Benjamin Petersone41251e2008-04-25 01:59:09 +0000480 Return the ``charset`` parameter of the :mailheader:`Content-Type` header,
481 coerced to lower case. If there is no :mailheader:`Content-Type` header, or if
482 that header has no ``charset`` parameter, *failobj* is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000483
Benjamin Petersone41251e2008-04-25 01:59:09 +0000484 Note that this method differs from :meth:`get_charset` which returns the
Georg Brandl3638e482009-04-27 16:46:17 +0000485 :class:`~email.charset.Charset` instance for the default encoding of the message body.
Georg Brandl116aa622007-08-15 14:28:22 +0000486
Georg Brandl116aa622007-08-15 14:28:22 +0000487
Georg Brandl3f076d82009-05-17 11:28:33 +0000488 .. method:: get_charsets(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000489
Benjamin Petersone41251e2008-04-25 01:59:09 +0000490 Return a list containing the character set names in the message. If the
491 message is a :mimetype:`multipart`, then the list will contain one element
492 for each subpart in the payload, otherwise, it will be a list of length 1.
Georg Brandl116aa622007-08-15 14:28:22 +0000493
Benjamin Petersone41251e2008-04-25 01:59:09 +0000494 Each item in the list will be a string which is the value of the
495 ``charset`` parameter in the :mailheader:`Content-Type` header for the
496 represented subpart. However, if the subpart has no
497 :mailheader:`Content-Type` header, no ``charset`` parameter, or is not of
498 the :mimetype:`text` main MIME type, then that item in the returned list
499 will be *failobj*.
Georg Brandl116aa622007-08-15 14:28:22 +0000500
501
Benjamin Petersone41251e2008-04-25 01:59:09 +0000502 .. method:: walk()
Georg Brandl116aa622007-08-15 14:28:22 +0000503
Benjamin Petersone41251e2008-04-25 01:59:09 +0000504 The :meth:`walk` method is an all-purpose generator which can be used to
505 iterate over all the parts and subparts of a message object tree, in
506 depth-first traversal order. You will typically use :meth:`walk` as the
507 iterator in a ``for`` loop; each iteration returns the next subpart.
Georg Brandl116aa622007-08-15 14:28:22 +0000508
Benjamin Petersone41251e2008-04-25 01:59:09 +0000509 Here's an example that prints the MIME type of every part of a multipart
510 message structure::
Georg Brandl116aa622007-08-15 14:28:22 +0000511
Benjamin Petersone41251e2008-04-25 01:59:09 +0000512 >>> for part in msg.walk():
513 ... print(part.get_content_type())
514 multipart/report
515 text/plain
516 message/delivery-status
517 text/plain
518 text/plain
519 message/rfc822
Georg Brandl116aa622007-08-15 14:28:22 +0000520
Benjamin Petersone41251e2008-04-25 01:59:09 +0000521 :class:`Message` objects can also optionally contain two instance attributes,
522 which can be used when generating the plain text of a MIME message.
Georg Brandl116aa622007-08-15 14:28:22 +0000523
524
Benjamin Petersone41251e2008-04-25 01:59:09 +0000525 .. attribute:: preamble
Georg Brandl116aa622007-08-15 14:28:22 +0000526
Benjamin Petersone41251e2008-04-25 01:59:09 +0000527 The format of a MIME document allows for some text between the blank line
528 following the headers, and the first multipart boundary string. Normally,
529 this text is never visible in a MIME-aware mail reader because it falls
530 outside the standard MIME armor. However, when viewing the raw text of
531 the message, or when viewing the message in a non-MIME aware reader, this
532 text can become visible.
Georg Brandl116aa622007-08-15 14:28:22 +0000533
Benjamin Petersone41251e2008-04-25 01:59:09 +0000534 The *preamble* attribute contains this leading extra-armor text for MIME
Georg Brandl3638e482009-04-27 16:46:17 +0000535 documents. When the :class:`~email.parser.Parser` discovers some text
536 after the headers but before the first boundary string, it assigns this
537 text to the message's *preamble* attribute. When the
538 :class:`~email.generator.Generator` is writing out the plain text
539 representation of a MIME message, and it finds the
Benjamin Petersone41251e2008-04-25 01:59:09 +0000540 message has a *preamble* attribute, it will write this text in the area
541 between the headers and the first boundary. See :mod:`email.parser` and
542 :mod:`email.generator` for details.
Georg Brandl116aa622007-08-15 14:28:22 +0000543
Benjamin Petersone41251e2008-04-25 01:59:09 +0000544 Note that if the message object has no preamble, the *preamble* attribute
545 will be ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000546
547
Benjamin Petersone41251e2008-04-25 01:59:09 +0000548 .. attribute:: epilogue
Georg Brandl116aa622007-08-15 14:28:22 +0000549
Benjamin Petersone41251e2008-04-25 01:59:09 +0000550 The *epilogue* attribute acts the same way as the *preamble* attribute,
551 except that it contains text that appears between the last boundary and
552 the end of the message.
Georg Brandl116aa622007-08-15 14:28:22 +0000553
Benjamin Petersone41251e2008-04-25 01:59:09 +0000554 You do not need to set the epilogue to the empty string in order for the
555 :class:`Generator` to print a newline at the end of the file.
Georg Brandl116aa622007-08-15 14:28:22 +0000556
557
Benjamin Petersone41251e2008-04-25 01:59:09 +0000558 .. attribute:: defects
Georg Brandl116aa622007-08-15 14:28:22 +0000559
Benjamin Petersone41251e2008-04-25 01:59:09 +0000560 The *defects* attribute contains a list of all the problems found when
561 parsing this message. See :mod:`email.errors` for a detailed description
562 of the possible parsing defects.