blob: 4b23f6acd9f77a960cdccf9ac2791f0fd5341fbd [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 Murray27e48ef2010-01-10 19:21:20 +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
R David Murray7dedcb42011-03-15 14:01:18 -040049 format the message the way you want. For example, by default it does
50 not do the mangling of lines that begin with ``From`` that is
51 required by the unix mbox format. For more flexibility, instantiate a
Georg Brandl3638e482009-04-27 16:46:17 +000052 :class:`~email.generator.Generator` instance and use its :meth:`flatten`
53 method directly. For example::
Georg Brandl116aa622007-08-15 14:28:22 +000054
Georg Brandl03124942008-06-10 15:50:56 +000055 from io import StringIO
Benjamin Petersone41251e2008-04-25 01:59:09 +000056 from email.generator import Generator
57 fp = StringIO()
R David Murray7dedcb42011-03-15 14:01:18 -040058 g = Generator(fp, mangle_from_=True, maxheaderlen=60)
Benjamin Petersone41251e2008-04-25 01:59:09 +000059 g.flatten(msg)
60 text = fp.getvalue()
Georg Brandl116aa622007-08-15 14:28:22 +000061
62
Benjamin Petersone41251e2008-04-25 01:59:09 +000063 .. method:: __str__()
Georg Brandl116aa622007-08-15 14:28:22 +000064
Benjamin Petersone41251e2008-04-25 01:59:09 +000065 Equivalent to ``as_string(unixfrom=True)``.
Georg Brandl116aa622007-08-15 14:28:22 +000066
67
Benjamin Petersone41251e2008-04-25 01:59:09 +000068 .. method:: is_multipart()
Georg Brandl116aa622007-08-15 14:28:22 +000069
Benjamin Petersone41251e2008-04-25 01:59:09 +000070 Return ``True`` if the message's payload is a list of sub-\
71 :class:`Message` objects, otherwise return ``False``. When
72 :meth:`is_multipart` returns False, the payload should be a string object.
Georg Brandl116aa622007-08-15 14:28:22 +000073
74
Benjamin Petersone41251e2008-04-25 01:59:09 +000075 .. method:: set_unixfrom(unixfrom)
Georg Brandl116aa622007-08-15 14:28:22 +000076
Benjamin Petersone41251e2008-04-25 01:59:09 +000077 Set the message's envelope header to *unixfrom*, which should be a string.
Georg Brandl116aa622007-08-15 14:28:22 +000078
79
Benjamin Petersone41251e2008-04-25 01:59:09 +000080 .. method:: get_unixfrom()
Georg Brandl116aa622007-08-15 14:28:22 +000081
Benjamin Petersone41251e2008-04-25 01:59:09 +000082 Return the message's envelope header. Defaults to ``None`` if the
83 envelope header was never set.
Georg Brandl116aa622007-08-15 14:28:22 +000084
85
Benjamin Petersone41251e2008-04-25 01:59:09 +000086 .. method:: attach(payload)
Georg Brandl116aa622007-08-15 14:28:22 +000087
Benjamin Petersone41251e2008-04-25 01:59:09 +000088 Add the given *payload* to the current payload, which must be ``None`` or
89 a list of :class:`Message` objects before the call. After the call, the
90 payload will always be a list of :class:`Message` objects. If you want to
91 set the payload to a scalar object (e.g. a string), use
92 :meth:`set_payload` instead.
Georg Brandl116aa622007-08-15 14:28:22 +000093
94
Georg Brandl3f076d82009-05-17 11:28:33 +000095 .. method:: get_payload(i=None, decode=False)
Georg Brandl116aa622007-08-15 14:28:22 +000096
Benjamin Petersond6313712008-07-31 16:23:04 +000097 Return the current payload, which will be a list of
Benjamin Petersone41251e2008-04-25 01:59:09 +000098 :class:`Message` objects when :meth:`is_multipart` is ``True``, or a
99 string when :meth:`is_multipart` is ``False``. If the payload is a list
100 and you mutate the list object, you modify the message's payload in place.
Georg Brandl116aa622007-08-15 14:28:22 +0000101
Benjamin Petersone41251e2008-04-25 01:59:09 +0000102 With optional argument *i*, :meth:`get_payload` will return the *i*-th
103 element of the payload, counting from zero, if :meth:`is_multipart` is
104 ``True``. An :exc:`IndexError` will be raised if *i* is less than 0 or
105 greater than or equal to the number of items in the payload. If the
106 payload is a string (i.e. :meth:`is_multipart` is ``False``) and *i* is
107 given, a :exc:`TypeError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000108
Benjamin Petersone41251e2008-04-25 01:59:09 +0000109 Optional *decode* is a flag indicating whether the payload should be
110 decoded or not, according to the :mailheader:`Content-Transfer-Encoding`
111 header. When ``True`` and the message is not a multipart, the payload will
112 be decoded if this header's value is ``quoted-printable`` or ``base64``.
113 If some other encoding is used, or :mailheader:`Content-Transfer-Encoding`
114 header is missing, or if the payload has bogus base64 data, the payload is
115 returned as-is (undecoded). If the message is a multipart and the
116 *decode* flag is ``True``, then ``None`` is returned. The default for
117 *decode* is ``False``.
Georg Brandl116aa622007-08-15 14:28:22 +0000118
119
Georg Brandl3f076d82009-05-17 11:28:33 +0000120 .. method:: set_payload(payload, charset=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000121
Benjamin Petersone41251e2008-04-25 01:59:09 +0000122 Set the entire message object's payload to *payload*. It is the client's
123 responsibility to ensure the payload invariants. Optional *charset* sets
124 the message's default character set; see :meth:`set_charset` for details.
Georg Brandl116aa622007-08-15 14:28:22 +0000125
Benjamin Petersone41251e2008-04-25 01:59:09 +0000126 .. method:: set_charset(charset)
Georg Brandl116aa622007-08-15 14:28:22 +0000127
Benjamin Petersone41251e2008-04-25 01:59:09 +0000128 Set the character set of the payload to *charset*, which can either be a
Georg Brandl3638e482009-04-27 16:46:17 +0000129 :class:`~email.charset.Charset` instance (see :mod:`email.charset`), a
130 string naming a character set, or ``None``. If it is a string, it will
131 be converted to a :class:`~email.charset.Charset` instance. If *charset*
132 is ``None``, the ``charset`` parameter will be removed from the
R David Murraye3d09ff2011-03-15 17:41:13 -0400133 :mailheader:`Content-Type` header (the message will not be otherwise
134 modified). Anything else will generate a :exc:`TypeError`.
Georg Brandl116aa622007-08-15 14:28:22 +0000135
R David Murraye3d09ff2011-03-15 17:41:13 -0400136 If there is no existing :mailheader:`MIME-Version` header one will be
137 added. If there is no existing :mailheader:`Content-Type` header, one
138 will be added with a value of :mimetype:`text/plain`. Whether the
139 :mailheader:`Content-Type` header already exists or not, its ``charset``
140 parameter will be set to *charset.output_charset*. If
141 *charset.input_charset* and *charset.output_charset* differ, the payload
142 will be re-encoded to the *output_charset*. If there is no existing
143 :mailheader:`Content-Transfer-Encoding` header, then the payload will be
144 transfer-encoded, if needed, using the specified
145 :class:`~email.charset.Charset`, and a header with the appropriate value
146 will be added. If a :mailheader:`Content-Transfer-Encoding` header
147 already exists, the payload is assumed to already be correctly encoded
148 using that :mailheader:`Content-Transfer-Encoding` and is not modified.
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
171
Benjamin Petersone41251e2008-04-25 01:59:09 +0000172 .. method:: __len__()
Georg Brandl116aa622007-08-15 14:28:22 +0000173
Benjamin Petersone41251e2008-04-25 01:59:09 +0000174 Return the total number of headers, including duplicates.
Georg Brandl116aa622007-08-15 14:28:22 +0000175
176
Benjamin Petersone41251e2008-04-25 01:59:09 +0000177 .. method:: __contains__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000178
Benjamin Petersone41251e2008-04-25 01:59:09 +0000179 Return true if the message object has a field named *name*. Matching is
180 done case-insensitively and *name* should not include the trailing colon.
181 Used for the ``in`` operator, e.g.::
Georg Brandl116aa622007-08-15 14:28:22 +0000182
Benjamin Petersone41251e2008-04-25 01:59:09 +0000183 if 'message-id' in myMessage:
184 print('Message-ID:', myMessage['message-id'])
Georg Brandl116aa622007-08-15 14:28:22 +0000185
186
Benjamin Petersone41251e2008-04-25 01:59:09 +0000187 .. method:: __getitem__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000188
Benjamin Petersone41251e2008-04-25 01:59:09 +0000189 Return the value of the named header field. *name* should not include the
190 colon field separator. If the header is missing, ``None`` is returned; a
191 :exc:`KeyError` is never raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000192
Benjamin Petersone41251e2008-04-25 01:59:09 +0000193 Note that if the named field appears more than once in the message's
194 headers, exactly which of those field values will be returned is
195 undefined. Use the :meth:`get_all` method to get the values of all the
196 extant named headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000197
198
Benjamin Petersone41251e2008-04-25 01:59:09 +0000199 .. method:: __setitem__(name, val)
Georg Brandl116aa622007-08-15 14:28:22 +0000200
Benjamin Petersone41251e2008-04-25 01:59:09 +0000201 Add a header to the message with field name *name* and value *val*. The
202 field is appended to the end of the message's existing fields.
Georg Brandl116aa622007-08-15 14:28:22 +0000203
Benjamin Petersone41251e2008-04-25 01:59:09 +0000204 Note that this does *not* overwrite or delete any existing header with the same
205 name. If you want to ensure that the new header is the only one present in the
206 message with field name *name*, delete the field first, e.g.::
Georg Brandl116aa622007-08-15 14:28:22 +0000207
Benjamin Petersone41251e2008-04-25 01:59:09 +0000208 del msg['subject']
209 msg['subject'] = 'Python roolz!'
Georg Brandl116aa622007-08-15 14:28:22 +0000210
211
Benjamin Petersone41251e2008-04-25 01:59:09 +0000212 .. method:: __delitem__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000213
Benjamin Petersone41251e2008-04-25 01:59:09 +0000214 Delete all occurrences of the field with name *name* from the message's
Georg Brandl3f076d82009-05-17 11:28:33 +0000215 headers. No exception is raised if the named field isn't present in the
216 headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000217
218
Benjamin Petersone41251e2008-04-25 01:59:09 +0000219 .. method:: keys()
Georg Brandl116aa622007-08-15 14:28:22 +0000220
Benjamin Petersone41251e2008-04-25 01:59:09 +0000221 Return a list of all the message's header field names.
Georg Brandl116aa622007-08-15 14:28:22 +0000222
223
Benjamin Petersone41251e2008-04-25 01:59:09 +0000224 .. method:: values()
Georg Brandl116aa622007-08-15 14:28:22 +0000225
Benjamin Petersone41251e2008-04-25 01:59:09 +0000226 Return a list of all the message's field values.
Georg Brandl116aa622007-08-15 14:28:22 +0000227
228
Benjamin Petersone41251e2008-04-25 01:59:09 +0000229 .. method:: items()
Georg Brandl116aa622007-08-15 14:28:22 +0000230
Benjamin Petersone41251e2008-04-25 01:59:09 +0000231 Return a list of 2-tuples containing all the message's field headers and
232 values.
Georg Brandl116aa622007-08-15 14:28:22 +0000233
234
Georg Brandl3f076d82009-05-17 11:28:33 +0000235 .. method:: get(name, failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000236
Benjamin Petersone41251e2008-04-25 01:59:09 +0000237 Return the value of the named header field. This is identical to
238 :meth:`__getitem__` except that optional *failobj* is returned if the
239 named header is missing (defaults to ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000240
Benjamin Petersone41251e2008-04-25 01:59:09 +0000241 Here are some additional useful methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000242
243
Georg Brandl3f076d82009-05-17 11:28:33 +0000244 .. method:: get_all(name, failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000245
Benjamin Petersone41251e2008-04-25 01:59:09 +0000246 Return a list of all the values for the field named *name*. If there are
247 no such named headers in the message, *failobj* is returned (defaults to
248 ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000249
250
Benjamin Petersone41251e2008-04-25 01:59:09 +0000251 .. method:: add_header(_name, _value, **_params)
Georg Brandl116aa622007-08-15 14:28:22 +0000252
Benjamin Petersone41251e2008-04-25 01:59:09 +0000253 Extended header setting. This method is similar to :meth:`__setitem__`
254 except that additional header parameters can be provided as keyword
255 arguments. *_name* is the header field to add and *_value* is the
256 *primary* value for the header.
Georg Brandl116aa622007-08-15 14:28:22 +0000257
Benjamin Petersone41251e2008-04-25 01:59:09 +0000258 For each item in the keyword argument dictionary *_params*, the key is
259 taken as the parameter name, with underscores converted to dashes (since
260 dashes are illegal in Python identifiers). Normally, the parameter will
261 be added as ``key="value"`` unless the value is ``None``, in which case
R. David Murrayccb9d052010-12-13 23:57:01 +0000262 only the key will be added. If the value contains non-ASCII characters,
263 it can be specified as a three tuple in the format
264 ``(CHARSET, LANGUAGE, VALUE)``, where ``CHARSET`` is a string naming the
265 charset to be used to encode the value, ``LANGUAGE`` can usually be set
266 to ``None`` or the empty string (see :RFC:`2231` for other possibilities),
267 and ``VALUE`` is the string value containing non-ASCII code points. If
268 a three tuple is not passed and the value contains non-ASCII characters,
269 it is automatically encoded in :RFC`2231` format using a ``CHARSET``
270 of ``utf-8`` and a ``LANGUAGE`` of ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000271
Benjamin Petersone41251e2008-04-25 01:59:09 +0000272 Here's an example::
Georg Brandl116aa622007-08-15 14:28:22 +0000273
Benjamin Petersone41251e2008-04-25 01:59:09 +0000274 msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')
Georg Brandl116aa622007-08-15 14:28:22 +0000275
Benjamin Petersone41251e2008-04-25 01:59:09 +0000276 This will add a header that looks like ::
Georg Brandl116aa622007-08-15 14:28:22 +0000277
Benjamin Petersone41251e2008-04-25 01:59:09 +0000278 Content-Disposition: attachment; filename="bud.gif"
Georg Brandl116aa622007-08-15 14:28:22 +0000279
R. David Murrayccb9d052010-12-13 23:57:01 +0000280 An example with with non-ASCII characters::
281
282 msg.add_header('Content-Disposition', 'attachment',
283 filename=('iso-8859-1', '', 'Fußballer.ppt'))
284
285 Which produces ::
286
287 Content-Disposition: attachment; filename*="iso-8859-1''Fu%DFballer.ppt"
288
Georg Brandl116aa622007-08-15 14:28:22 +0000289
Benjamin Petersone41251e2008-04-25 01:59:09 +0000290 .. method:: replace_header(_name, _value)
Georg Brandl116aa622007-08-15 14:28:22 +0000291
Benjamin Petersone41251e2008-04-25 01:59:09 +0000292 Replace a header. Replace the first header found in the message that
293 matches *_name*, retaining header order and field name case. If no
294 matching header was found, a :exc:`KeyError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000295
Georg Brandl116aa622007-08-15 14:28:22 +0000296
Benjamin Petersone41251e2008-04-25 01:59:09 +0000297 .. method:: get_content_type()
Georg Brandl116aa622007-08-15 14:28:22 +0000298
Benjamin Petersone41251e2008-04-25 01:59:09 +0000299 Return the message's content type. The returned string is coerced to
300 lower case of the form :mimetype:`maintype/subtype`. If there was no
301 :mailheader:`Content-Type` header in the message the default type as given
302 by :meth:`get_default_type` will be returned. Since according to
303 :rfc:`2045`, messages always have a default type, :meth:`get_content_type`
304 will always return a value.
Georg Brandl116aa622007-08-15 14:28:22 +0000305
Benjamin Petersone41251e2008-04-25 01:59:09 +0000306 :rfc:`2045` defines a message's default type to be :mimetype:`text/plain`
307 unless it appears inside a :mimetype:`multipart/digest` container, in
308 which case it would be :mimetype:`message/rfc822`. If the
309 :mailheader:`Content-Type` header has an invalid type specification,
310 :rfc:`2045` mandates that the default type be :mimetype:`text/plain`.
Georg Brandl116aa622007-08-15 14:28:22 +0000311
Georg Brandl116aa622007-08-15 14:28:22 +0000312
Benjamin Petersone41251e2008-04-25 01:59:09 +0000313 .. method:: get_content_maintype()
Georg Brandl116aa622007-08-15 14:28:22 +0000314
Benjamin Petersone41251e2008-04-25 01:59:09 +0000315 Return the message's main content type. This is the :mimetype:`maintype`
316 part of the string returned by :meth:`get_content_type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000317
Georg Brandl116aa622007-08-15 14:28:22 +0000318
Benjamin Petersone41251e2008-04-25 01:59:09 +0000319 .. method:: get_content_subtype()
Georg Brandl116aa622007-08-15 14:28:22 +0000320
Benjamin Petersone41251e2008-04-25 01:59:09 +0000321 Return the message's sub-content type. This is the :mimetype:`subtype`
322 part of the string returned by :meth:`get_content_type`.
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_default_type()
Georg Brandl116aa622007-08-15 14:28:22 +0000326
Benjamin Petersone41251e2008-04-25 01:59:09 +0000327 Return the default content type. Most messages have a default content
328 type of :mimetype:`text/plain`, except for messages that are subparts of
329 :mimetype:`multipart/digest` containers. Such subparts have a default
330 content type of :mimetype:`message/rfc822`.
Georg Brandl116aa622007-08-15 14:28:22 +0000331
Georg Brandl116aa622007-08-15 14:28:22 +0000332
Benjamin Petersone41251e2008-04-25 01:59:09 +0000333 .. method:: set_default_type(ctype)
Georg Brandl116aa622007-08-15 14:28:22 +0000334
Benjamin Petersone41251e2008-04-25 01:59:09 +0000335 Set the default content type. *ctype* should either be
336 :mimetype:`text/plain` or :mimetype:`message/rfc822`, although this is not
337 enforced. The default content type is not stored in the
338 :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000339
Georg Brandl116aa622007-08-15 14:28:22 +0000340
Georg Brandl3f076d82009-05-17 11:28:33 +0000341 .. method:: get_params(failobj=None, header='content-type', unquote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000342
Benjamin Petersone41251e2008-04-25 01:59:09 +0000343 Return the message's :mailheader:`Content-Type` parameters, as a list.
344 The elements of the returned list are 2-tuples of key/value pairs, as
345 split on the ``'='`` sign. The left hand side of the ``'='`` is the key,
346 while the right hand side is the value. If there is no ``'='`` sign in
347 the parameter the value is the empty string, otherwise the value is as
348 described in :meth:`get_param` and is unquoted if optional *unquote* is
349 ``True`` (the default).
Georg Brandl116aa622007-08-15 14:28:22 +0000350
Benjamin Petersone41251e2008-04-25 01:59:09 +0000351 Optional *failobj* is the object to return if there is no
352 :mailheader:`Content-Type` header. Optional *header* is the header to
353 search instead of :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000354
Georg Brandl116aa622007-08-15 14:28:22 +0000355
Georg Brandl3f076d82009-05-17 11:28:33 +0000356 .. method:: get_param(param, failobj=None, header='content-type', unquote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000357
Benjamin Petersone41251e2008-04-25 01:59:09 +0000358 Return the value of the :mailheader:`Content-Type` header's parameter
359 *param* as a string. If the message has no :mailheader:`Content-Type`
360 header or if there is no such parameter, then *failobj* is returned
361 (defaults to ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000362
Benjamin Petersone41251e2008-04-25 01:59:09 +0000363 Optional *header* if given, specifies the message header to use instead of
364 :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000365
Benjamin Petersone41251e2008-04-25 01:59:09 +0000366 Parameter keys are always compared case insensitively. The return value
367 can either be a string, or a 3-tuple if the parameter was :rfc:`2231`
368 encoded. When it's a 3-tuple, the elements of the value are of the form
369 ``(CHARSET, LANGUAGE, VALUE)``. Note that both ``CHARSET`` and
370 ``LANGUAGE`` can be ``None``, in which case you should consider ``VALUE``
371 to be encoded in the ``us-ascii`` charset. You can usually ignore
372 ``LANGUAGE``.
Georg Brandl116aa622007-08-15 14:28:22 +0000373
Benjamin Petersone41251e2008-04-25 01:59:09 +0000374 If your application doesn't care whether the parameter was encoded as in
375 :rfc:`2231`, you can collapse the parameter value by calling
Georg Brandl540b45c2009-04-27 16:45:26 +0000376 :func:`email.utils.collapse_rfc2231_value`, passing in the return value
Benjamin Petersone41251e2008-04-25 01:59:09 +0000377 from :meth:`get_param`. This will return a suitably decoded Unicode
R. David Murrayccb9d052010-12-13 23:57:01 +0000378 string when the value is a tuple, or the original string unquoted if it
Benjamin Petersone41251e2008-04-25 01:59:09 +0000379 isn't. For example::
Georg Brandl116aa622007-08-15 14:28:22 +0000380
Benjamin Petersone41251e2008-04-25 01:59:09 +0000381 rawparam = msg.get_param('foo')
Georg Brandl540b45c2009-04-27 16:45:26 +0000382 param = email.utils.collapse_rfc2231_value(rawparam)
Georg Brandl116aa622007-08-15 14:28:22 +0000383
Benjamin Petersone41251e2008-04-25 01:59:09 +0000384 In any case, the parameter value (either the returned string, or the
385 ``VALUE`` item in the 3-tuple) is always unquoted, unless *unquote* is set
386 to ``False``.
Georg Brandl116aa622007-08-15 14:28:22 +0000387
Georg Brandl116aa622007-08-15 14:28:22 +0000388
Georg Brandl3f076d82009-05-17 11:28:33 +0000389 .. method:: set_param(param, value, header='Content-Type', requote=True, charset=None, language='')
Georg Brandl116aa622007-08-15 14:28:22 +0000390
Benjamin Petersone41251e2008-04-25 01:59:09 +0000391 Set a parameter in the :mailheader:`Content-Type` header. If the
392 parameter already exists in the header, its value will be replaced with
393 *value*. If the :mailheader:`Content-Type` header as not yet been defined
394 for this message, it will be set to :mimetype:`text/plain` and the new
395 parameter value will be appended as per :rfc:`2045`.
Georg Brandl116aa622007-08-15 14:28:22 +0000396
Benjamin Petersone41251e2008-04-25 01:59:09 +0000397 Optional *header* specifies an alternative header to
398 :mailheader:`Content-Type`, and all parameters will be quoted as necessary
399 unless optional *requote* is ``False`` (the default is ``True``).
Georg Brandl116aa622007-08-15 14:28:22 +0000400
Benjamin Petersone41251e2008-04-25 01:59:09 +0000401 If optional *charset* is specified, the parameter will be encoded
402 according to :rfc:`2231`. Optional *language* specifies the RFC 2231
403 language, defaulting to the empty string. Both *charset* and *language*
404 should be strings.
Georg Brandl116aa622007-08-15 14:28:22 +0000405
Georg Brandl116aa622007-08-15 14:28:22 +0000406
Georg Brandl3f076d82009-05-17 11:28:33 +0000407 .. method:: del_param(param, header='content-type', requote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000408
Benjamin Petersone41251e2008-04-25 01:59:09 +0000409 Remove the given parameter completely from the :mailheader:`Content-Type`
410 header. The header will be re-written in place without the parameter or
411 its value. All values will be quoted as necessary unless *requote* is
412 ``False`` (the default is ``True``). Optional *header* specifies an
413 alternative to :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000414
Georg Brandl116aa622007-08-15 14:28:22 +0000415
Georg Brandl3f076d82009-05-17 11:28:33 +0000416 .. method:: set_type(type, header='Content-Type', requote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000417
Benjamin Petersone41251e2008-04-25 01:59:09 +0000418 Set the main type and subtype for the :mailheader:`Content-Type`
419 header. *type* must be a string in the form :mimetype:`maintype/subtype`,
420 otherwise a :exc:`ValueError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000421
Benjamin Petersone41251e2008-04-25 01:59:09 +0000422 This method replaces the :mailheader:`Content-Type` header, keeping all
423 the parameters in place. If *requote* is ``False``, this leaves the
424 existing header's quoting as is, otherwise the parameters will be quoted
425 (the default).
Georg Brandl116aa622007-08-15 14:28:22 +0000426
Benjamin Petersone41251e2008-04-25 01:59:09 +0000427 An alternative header can be specified in the *header* argument. When the
428 :mailheader:`Content-Type` header is set a :mailheader:`MIME-Version`
429 header is also added.
Georg Brandl116aa622007-08-15 14:28:22 +0000430
Georg Brandl116aa622007-08-15 14:28:22 +0000431
Georg Brandl3f076d82009-05-17 11:28:33 +0000432 .. method:: get_filename(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000433
Benjamin Petersone41251e2008-04-25 01:59:09 +0000434 Return the value of the ``filename`` parameter of the
435 :mailheader:`Content-Disposition` header of the message. If the header
436 does not have a ``filename`` parameter, this method falls back to looking
R. David Murray9fc20532010-03-04 17:43:40 +0000437 for the ``name`` parameter on the :mailheader:`Content-Type` header. If
438 neither is found, or the header is missing, then *failobj* is returned.
439 The returned string will always be unquoted as per
440 :func:`email.utils.unquote`.
Georg Brandl116aa622007-08-15 14:28:22 +0000441
442
Georg Brandl3f076d82009-05-17 11:28:33 +0000443 .. method:: get_boundary(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000444
Benjamin Petersone41251e2008-04-25 01:59:09 +0000445 Return the value of the ``boundary`` parameter of the
446 :mailheader:`Content-Type` header of the message, or *failobj* if either
447 the header is missing, or has no ``boundary`` parameter. The returned
Georg Brandl540b45c2009-04-27 16:45:26 +0000448 string will always be unquoted as per :func:`email.utils.unquote`.
Georg Brandl116aa622007-08-15 14:28:22 +0000449
450
Benjamin Petersone41251e2008-04-25 01:59:09 +0000451 .. method:: set_boundary(boundary)
Georg Brandl116aa622007-08-15 14:28:22 +0000452
Benjamin Petersone41251e2008-04-25 01:59:09 +0000453 Set the ``boundary`` parameter of the :mailheader:`Content-Type` header to
454 *boundary*. :meth:`set_boundary` will always quote *boundary* if
455 necessary. A :exc:`HeaderParseError` is raised if the message object has
456 no :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000457
Benjamin Petersone41251e2008-04-25 01:59:09 +0000458 Note that using this method is subtly different than deleting the old
459 :mailheader:`Content-Type` header and adding a new one with the new
460 boundary via :meth:`add_header`, because :meth:`set_boundary` preserves
461 the order of the :mailheader:`Content-Type` header in the list of
462 headers. However, it does *not* preserve any continuation lines which may
463 have been present in the original :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000464
465
Georg Brandl3f076d82009-05-17 11:28:33 +0000466 .. method:: get_content_charset(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000467
Benjamin Petersone41251e2008-04-25 01:59:09 +0000468 Return the ``charset`` parameter of the :mailheader:`Content-Type` header,
469 coerced to lower case. If there is no :mailheader:`Content-Type` header, or if
470 that header has no ``charset`` parameter, *failobj* is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000471
Benjamin Petersone41251e2008-04-25 01:59:09 +0000472 Note that this method differs from :meth:`get_charset` which returns the
Georg Brandl3638e482009-04-27 16:46:17 +0000473 :class:`~email.charset.Charset` instance for the default encoding of the message body.
Georg Brandl116aa622007-08-15 14:28:22 +0000474
Georg Brandl116aa622007-08-15 14:28:22 +0000475
Georg Brandl3f076d82009-05-17 11:28:33 +0000476 .. method:: get_charsets(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000477
Benjamin Petersone41251e2008-04-25 01:59:09 +0000478 Return a list containing the character set names in the message. If the
479 message is a :mimetype:`multipart`, then the list will contain one element
480 for each subpart in the payload, otherwise, it will be a list of length 1.
Georg Brandl116aa622007-08-15 14:28:22 +0000481
Benjamin Petersone41251e2008-04-25 01:59:09 +0000482 Each item in the list will be a string which is the value of the
483 ``charset`` parameter in the :mailheader:`Content-Type` header for the
484 represented subpart. However, if the subpart has no
485 :mailheader:`Content-Type` header, no ``charset`` parameter, or is not of
486 the :mimetype:`text` main MIME type, then that item in the returned list
487 will be *failobj*.
Georg Brandl116aa622007-08-15 14:28:22 +0000488
489
Benjamin Petersone41251e2008-04-25 01:59:09 +0000490 .. method:: walk()
Georg Brandl116aa622007-08-15 14:28:22 +0000491
Benjamin Petersone41251e2008-04-25 01:59:09 +0000492 The :meth:`walk` method is an all-purpose generator which can be used to
493 iterate over all the parts and subparts of a message object tree, in
494 depth-first traversal order. You will typically use :meth:`walk` as the
495 iterator in a ``for`` loop; each iteration returns the next subpart.
Georg Brandl116aa622007-08-15 14:28:22 +0000496
Benjamin Petersone41251e2008-04-25 01:59:09 +0000497 Here's an example that prints the MIME type of every part of a multipart
498 message structure::
Georg Brandl116aa622007-08-15 14:28:22 +0000499
Benjamin Petersone41251e2008-04-25 01:59:09 +0000500 >>> for part in msg.walk():
501 ... print(part.get_content_type())
502 multipart/report
503 text/plain
504 message/delivery-status
505 text/plain
506 text/plain
507 message/rfc822
Georg Brandl116aa622007-08-15 14:28:22 +0000508
Benjamin Petersone41251e2008-04-25 01:59:09 +0000509 :class:`Message` objects can also optionally contain two instance attributes,
510 which can be used when generating the plain text of a MIME message.
Georg Brandl116aa622007-08-15 14:28:22 +0000511
512
Benjamin Petersone41251e2008-04-25 01:59:09 +0000513 .. attribute:: preamble
Georg Brandl116aa622007-08-15 14:28:22 +0000514
Benjamin Petersone41251e2008-04-25 01:59:09 +0000515 The format of a MIME document allows for some text between the blank line
516 following the headers, and the first multipart boundary string. Normally,
517 this text is never visible in a MIME-aware mail reader because it falls
518 outside the standard MIME armor. However, when viewing the raw text of
519 the message, or when viewing the message in a non-MIME aware reader, this
520 text can become visible.
Georg Brandl116aa622007-08-15 14:28:22 +0000521
Benjamin Petersone41251e2008-04-25 01:59:09 +0000522 The *preamble* attribute contains this leading extra-armor text for MIME
Georg Brandl3638e482009-04-27 16:46:17 +0000523 documents. When the :class:`~email.parser.Parser` discovers some text
524 after the headers but before the first boundary string, it assigns this
525 text to the message's *preamble* attribute. When the
526 :class:`~email.generator.Generator` is writing out the plain text
527 representation of a MIME message, and it finds the
Benjamin Petersone41251e2008-04-25 01:59:09 +0000528 message has a *preamble* attribute, it will write this text in the area
529 between the headers and the first boundary. See :mod:`email.parser` and
530 :mod:`email.generator` for details.
Georg Brandl116aa622007-08-15 14:28:22 +0000531
Benjamin Petersone41251e2008-04-25 01:59:09 +0000532 Note that if the message object has no preamble, the *preamble* attribute
533 will be ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000534
535
Benjamin Petersone41251e2008-04-25 01:59:09 +0000536 .. attribute:: epilogue
Georg Brandl116aa622007-08-15 14:28:22 +0000537
Benjamin Petersone41251e2008-04-25 01:59:09 +0000538 The *epilogue* attribute acts the same way as the *preamble* attribute,
539 except that it contains text that appears between the last boundary and
540 the end of the message.
Georg Brandl116aa622007-08-15 14:28:22 +0000541
Benjamin Petersone41251e2008-04-25 01:59:09 +0000542 You do not need to set the epilogue to the empty string in order for the
543 :class:`Generator` to print a newline at the end of the file.
Georg Brandl116aa622007-08-15 14:28:22 +0000544
545
Benjamin Petersone41251e2008-04-25 01:59:09 +0000546 .. attribute:: defects
Georg Brandl116aa622007-08-15 14:28:22 +0000547
Benjamin Petersone41251e2008-04-25 01:59:09 +0000548 The *defects* attribute contains a list of all the problems found when
549 parsing this message. See :mod:`email.errors` for a detailed description
550 of the possible parsing defects.