blob: cf0253140681280dcaddb335d6e59bffeb96b11a [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
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
114 returned as-is (undecoded). If the message is a multipart and the
115 *decode* flag is ``True``, then ``None`` is returned. The default for
116 *decode* is ``False``.
Georg Brandl116aa622007-08-15 14:28:22 +0000117
118
Georg Brandl3f076d82009-05-17 11:28:33 +0000119 .. method:: set_payload(payload, charset=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000120
Benjamin Petersone41251e2008-04-25 01:59:09 +0000121 Set the entire message object's payload to *payload*. It is the client's
122 responsibility to ensure the payload invariants. Optional *charset* sets
123 the message's default character set; see :meth:`set_charset` for details.
Georg Brandl116aa622007-08-15 14:28:22 +0000124
Benjamin Petersone41251e2008-04-25 01:59:09 +0000125 .. method:: set_charset(charset)
Georg Brandl116aa622007-08-15 14:28:22 +0000126
Benjamin Petersone41251e2008-04-25 01:59:09 +0000127 Set the character set of the payload to *charset*, which can either be a
Georg Brandl3638e482009-04-27 16:46:17 +0000128 :class:`~email.charset.Charset` instance (see :mod:`email.charset`), a
129 string naming a character set, or ``None``. If it is a string, it will
130 be converted to a :class:`~email.charset.Charset` instance. If *charset*
131 is ``None``, the ``charset`` parameter will be removed from the
132 :mailheader:`Content-Type` header. Anything else will generate a
133 :exc:`TypeError`.
Georg Brandl116aa622007-08-15 14:28:22 +0000134
Benjamin Petersone41251e2008-04-25 01:59:09 +0000135 The message will be assumed to be of type :mimetype:`text/\*` encoded with
136 *charset.input_charset*. It will be converted to *charset.output_charset*
137 and encoded properly, if needed, when generating the plain text
138 representation of the message. MIME headers (:mailheader:`MIME-Version`,
139 :mailheader:`Content-Type`, :mailheader:`Content-Transfer-Encoding`) will
140 be added as needed.
Georg Brandl116aa622007-08-15 14:28:22 +0000141
Benjamin Petersone41251e2008-04-25 01:59:09 +0000142 .. method:: get_charset()
Georg Brandl116aa622007-08-15 14:28:22 +0000143
Georg Brandl3638e482009-04-27 16:46:17 +0000144 Return the :class:`~email.charset.Charset` instance associated with the
145 message's payload.
Georg Brandl116aa622007-08-15 14:28:22 +0000146
Benjamin Petersone41251e2008-04-25 01:59:09 +0000147 The following methods implement a mapping-like interface for accessing the
148 message's :rfc:`2822` headers. Note that there are some semantic differences
149 between these methods and a normal mapping (i.e. dictionary) interface. For
150 example, in a dictionary there are no duplicate keys, but here there may be
151 duplicate message headers. Also, in dictionaries there is no guaranteed
152 order to the keys returned by :meth:`keys`, but in a :class:`Message` object,
153 headers are always returned in the order they appeared in the original
154 message, or were added to the message later. Any header deleted and then
155 re-added are always appended to the end of the header list.
Georg Brandl116aa622007-08-15 14:28:22 +0000156
Benjamin Petersone41251e2008-04-25 01:59:09 +0000157 These semantic differences are intentional and are biased toward maximal
158 convenience.
Georg Brandl116aa622007-08-15 14:28:22 +0000159
Benjamin Petersone41251e2008-04-25 01:59:09 +0000160 Note that in all cases, any envelope header present in the message is not
161 included in the mapping interface.
Georg Brandl116aa622007-08-15 14:28:22 +0000162
163
Benjamin Petersone41251e2008-04-25 01:59:09 +0000164 .. method:: __len__()
Georg Brandl116aa622007-08-15 14:28:22 +0000165
Benjamin Petersone41251e2008-04-25 01:59:09 +0000166 Return the total number of headers, including duplicates.
Georg Brandl116aa622007-08-15 14:28:22 +0000167
168
Benjamin Petersone41251e2008-04-25 01:59:09 +0000169 .. method:: __contains__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000170
Benjamin Petersone41251e2008-04-25 01:59:09 +0000171 Return true if the message object has a field named *name*. Matching is
172 done case-insensitively and *name* should not include the trailing colon.
173 Used for the ``in`` operator, e.g.::
Georg Brandl116aa622007-08-15 14:28:22 +0000174
Benjamin Petersone41251e2008-04-25 01:59:09 +0000175 if 'message-id' in myMessage:
176 print('Message-ID:', myMessage['message-id'])
Georg Brandl116aa622007-08-15 14:28:22 +0000177
178
Benjamin Petersone41251e2008-04-25 01:59:09 +0000179 .. method:: __getitem__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000180
Benjamin Petersone41251e2008-04-25 01:59:09 +0000181 Return the value of the named header field. *name* should not include the
182 colon field separator. If the header is missing, ``None`` is returned; a
183 :exc:`KeyError` is never raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000184
Benjamin Petersone41251e2008-04-25 01:59:09 +0000185 Note that if the named field appears more than once in the message's
186 headers, exactly which of those field values will be returned is
187 undefined. Use the :meth:`get_all` method to get the values of all the
188 extant named headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000189
190
Benjamin Petersone41251e2008-04-25 01:59:09 +0000191 .. method:: __setitem__(name, val)
Georg Brandl116aa622007-08-15 14:28:22 +0000192
Benjamin Petersone41251e2008-04-25 01:59:09 +0000193 Add a header to the message with field name *name* and value *val*. The
194 field is appended to the end of the message's existing fields.
Georg Brandl116aa622007-08-15 14:28:22 +0000195
Benjamin Petersone41251e2008-04-25 01:59:09 +0000196 Note that this does *not* overwrite or delete any existing header with the same
197 name. If you want to ensure that the new header is the only one present in the
198 message with field name *name*, delete the field first, e.g.::
Georg Brandl116aa622007-08-15 14:28:22 +0000199
Benjamin Petersone41251e2008-04-25 01:59:09 +0000200 del msg['subject']
201 msg['subject'] = 'Python roolz!'
Georg Brandl116aa622007-08-15 14:28:22 +0000202
203
Benjamin Petersone41251e2008-04-25 01:59:09 +0000204 .. method:: __delitem__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000205
Benjamin Petersone41251e2008-04-25 01:59:09 +0000206 Delete all occurrences of the field with name *name* from the message's
Georg Brandl3f076d82009-05-17 11:28:33 +0000207 headers. No exception is raised if the named field isn't present in the
208 headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000209
210
Benjamin Petersone41251e2008-04-25 01:59:09 +0000211 .. method:: Message.__contains__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000212
Benjamin Petersone41251e2008-04-25 01:59:09 +0000213 Return true if the message contains a header field named *name*, otherwise
214 return false.
Georg Brandl116aa622007-08-15 14:28:22 +0000215
216
Benjamin Petersone41251e2008-04-25 01:59:09 +0000217 .. method:: keys()
Georg Brandl116aa622007-08-15 14:28:22 +0000218
Benjamin Petersone41251e2008-04-25 01:59:09 +0000219 Return a list of all the message's header field names.
Georg Brandl116aa622007-08-15 14:28:22 +0000220
221
Benjamin Petersone41251e2008-04-25 01:59:09 +0000222 .. method:: values()
Georg Brandl116aa622007-08-15 14:28:22 +0000223
Benjamin Petersone41251e2008-04-25 01:59:09 +0000224 Return a list of all the message's field values.
Georg Brandl116aa622007-08-15 14:28:22 +0000225
226
Benjamin Petersone41251e2008-04-25 01:59:09 +0000227 .. method:: items()
Georg Brandl116aa622007-08-15 14:28:22 +0000228
Benjamin Petersone41251e2008-04-25 01:59:09 +0000229 Return a list of 2-tuples containing all the message's field headers and
230 values.
Georg Brandl116aa622007-08-15 14:28:22 +0000231
232
Georg Brandl3f076d82009-05-17 11:28:33 +0000233 .. method:: get(name, failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000234
Benjamin Petersone41251e2008-04-25 01:59:09 +0000235 Return the value of the named header field. This is identical to
236 :meth:`__getitem__` except that optional *failobj* is returned if the
237 named header is missing (defaults to ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000238
Benjamin Petersone41251e2008-04-25 01:59:09 +0000239 Here are some additional useful methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000240
241
Georg Brandl3f076d82009-05-17 11:28:33 +0000242 .. method:: get_all(name, failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000243
Benjamin Petersone41251e2008-04-25 01:59:09 +0000244 Return a list of all the values for the field named *name*. If there are
245 no such named headers in the message, *failobj* is returned (defaults to
246 ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000247
248
Benjamin Petersone41251e2008-04-25 01:59:09 +0000249 .. method:: add_header(_name, _value, **_params)
Georg Brandl116aa622007-08-15 14:28:22 +0000250
Benjamin Petersone41251e2008-04-25 01:59:09 +0000251 Extended header setting. This method is similar to :meth:`__setitem__`
252 except that additional header parameters can be provided as keyword
253 arguments. *_name* is the header field to add and *_value* is the
254 *primary* value for the header.
Georg Brandl116aa622007-08-15 14:28:22 +0000255
Benjamin Petersone41251e2008-04-25 01:59:09 +0000256 For each item in the keyword argument dictionary *_params*, the key is
257 taken as the parameter name, with underscores converted to dashes (since
258 dashes are illegal in Python identifiers). Normally, the parameter will
259 be added as ``key="value"`` unless the value is ``None``, in which case
R. David Murrayccb9d052010-12-13 23:57:01 +0000260 only the key will be added. If the value contains non-ASCII characters,
261 it can be specified as a three tuple in the format
262 ``(CHARSET, LANGUAGE, VALUE)``, where ``CHARSET`` is a string naming the
263 charset to be used to encode the value, ``LANGUAGE`` can usually be set
264 to ``None`` or the empty string (see :RFC:`2231` for other possibilities),
265 and ``VALUE`` is the string value containing non-ASCII code points. If
266 a three tuple is not passed and the value contains non-ASCII characters,
267 it is automatically encoded in :RFC`2231` format using a ``CHARSET``
268 of ``utf-8`` and a ``LANGUAGE`` of ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000269
Benjamin Petersone41251e2008-04-25 01:59:09 +0000270 Here's an example::
Georg Brandl116aa622007-08-15 14:28:22 +0000271
Benjamin Petersone41251e2008-04-25 01:59:09 +0000272 msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')
Georg Brandl116aa622007-08-15 14:28:22 +0000273
Benjamin Petersone41251e2008-04-25 01:59:09 +0000274 This will add a header that looks like ::
Georg Brandl116aa622007-08-15 14:28:22 +0000275
Benjamin Petersone41251e2008-04-25 01:59:09 +0000276 Content-Disposition: attachment; filename="bud.gif"
Georg Brandl116aa622007-08-15 14:28:22 +0000277
R. David Murrayccb9d052010-12-13 23:57:01 +0000278 An example with with non-ASCII characters::
279
280 msg.add_header('Content-Disposition', 'attachment',
281 filename=('iso-8859-1', '', 'Fußballer.ppt'))
282
283 Which produces ::
284
285 Content-Disposition: attachment; filename*="iso-8859-1''Fu%DFballer.ppt"
286
Georg Brandl116aa622007-08-15 14:28:22 +0000287
Benjamin Petersone41251e2008-04-25 01:59:09 +0000288 .. method:: replace_header(_name, _value)
Georg Brandl116aa622007-08-15 14:28:22 +0000289
Benjamin Petersone41251e2008-04-25 01:59:09 +0000290 Replace a header. Replace the first header found in the message that
291 matches *_name*, retaining header order and field name case. If no
292 matching header was found, a :exc:`KeyError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000293
Georg Brandl116aa622007-08-15 14:28:22 +0000294
Benjamin Petersone41251e2008-04-25 01:59:09 +0000295 .. method:: get_content_type()
Georg Brandl116aa622007-08-15 14:28:22 +0000296
Benjamin Petersone41251e2008-04-25 01:59:09 +0000297 Return the message's content type. The returned string is coerced to
298 lower case of the form :mimetype:`maintype/subtype`. If there was no
299 :mailheader:`Content-Type` header in the message the default type as given
300 by :meth:`get_default_type` will be returned. Since according to
301 :rfc:`2045`, messages always have a default type, :meth:`get_content_type`
302 will always return a value.
Georg Brandl116aa622007-08-15 14:28:22 +0000303
Benjamin Petersone41251e2008-04-25 01:59:09 +0000304 :rfc:`2045` defines a message's default type to be :mimetype:`text/plain`
305 unless it appears inside a :mimetype:`multipart/digest` container, in
306 which case it would be :mimetype:`message/rfc822`. If the
307 :mailheader:`Content-Type` header has an invalid type specification,
308 :rfc:`2045` mandates that the default type be :mimetype:`text/plain`.
Georg Brandl116aa622007-08-15 14:28:22 +0000309
Georg Brandl116aa622007-08-15 14:28:22 +0000310
Benjamin Petersone41251e2008-04-25 01:59:09 +0000311 .. method:: get_content_maintype()
Georg Brandl116aa622007-08-15 14:28:22 +0000312
Benjamin Petersone41251e2008-04-25 01:59:09 +0000313 Return the message's main content type. This is the :mimetype:`maintype`
314 part of the string returned by :meth:`get_content_type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000315
Georg Brandl116aa622007-08-15 14:28:22 +0000316
Benjamin Petersone41251e2008-04-25 01:59:09 +0000317 .. method:: get_content_subtype()
Georg Brandl116aa622007-08-15 14:28:22 +0000318
Benjamin Petersone41251e2008-04-25 01:59:09 +0000319 Return the message's sub-content type. This is the :mimetype:`subtype`
320 part of the string returned by :meth:`get_content_type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000321
Georg Brandl116aa622007-08-15 14:28:22 +0000322
Benjamin Petersone41251e2008-04-25 01:59:09 +0000323 .. method:: get_default_type()
Georg Brandl116aa622007-08-15 14:28:22 +0000324
Benjamin Petersone41251e2008-04-25 01:59:09 +0000325 Return the default content type. Most messages have a default content
326 type of :mimetype:`text/plain`, except for messages that are subparts of
327 :mimetype:`multipart/digest` containers. Such subparts have a default
328 content type of :mimetype:`message/rfc822`.
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:: set_default_type(ctype)
Georg Brandl116aa622007-08-15 14:28:22 +0000332
Benjamin Petersone41251e2008-04-25 01:59:09 +0000333 Set the default content type. *ctype* should either be
334 :mimetype:`text/plain` or :mimetype:`message/rfc822`, although this is not
335 enforced. The default content type is not stored in the
336 :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000337
Georg Brandl116aa622007-08-15 14:28:22 +0000338
Georg Brandl3f076d82009-05-17 11:28:33 +0000339 .. method:: get_params(failobj=None, header='content-type', unquote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000340
Benjamin Petersone41251e2008-04-25 01:59:09 +0000341 Return the message's :mailheader:`Content-Type` parameters, as a list.
342 The elements of the returned list are 2-tuples of key/value pairs, as
343 split on the ``'='`` sign. The left hand side of the ``'='`` is the key,
344 while the right hand side is the value. If there is no ``'='`` sign in
345 the parameter the value is the empty string, otherwise the value is as
346 described in :meth:`get_param` and is unquoted if optional *unquote* is
347 ``True`` (the default).
Georg Brandl116aa622007-08-15 14:28:22 +0000348
Benjamin Petersone41251e2008-04-25 01:59:09 +0000349 Optional *failobj* is the object to return if there is no
350 :mailheader:`Content-Type` header. Optional *header* is the header to
351 search instead of :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000352
Georg Brandl116aa622007-08-15 14:28:22 +0000353
Georg Brandl3f076d82009-05-17 11:28:33 +0000354 .. method:: get_param(param, failobj=None, header='content-type', unquote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000355
Benjamin Petersone41251e2008-04-25 01:59:09 +0000356 Return the value of the :mailheader:`Content-Type` header's parameter
357 *param* as a string. If the message has no :mailheader:`Content-Type`
358 header or if there is no such parameter, then *failobj* is returned
359 (defaults to ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000360
Benjamin Petersone41251e2008-04-25 01:59:09 +0000361 Optional *header* if given, specifies the message header to use instead of
362 :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000363
Benjamin Petersone41251e2008-04-25 01:59:09 +0000364 Parameter keys are always compared case insensitively. The return value
365 can either be a string, or a 3-tuple if the parameter was :rfc:`2231`
366 encoded. When it's a 3-tuple, the elements of the value are of the form
367 ``(CHARSET, LANGUAGE, VALUE)``. Note that both ``CHARSET`` and
368 ``LANGUAGE`` can be ``None``, in which case you should consider ``VALUE``
369 to be encoded in the ``us-ascii`` charset. You can usually ignore
370 ``LANGUAGE``.
Georg Brandl116aa622007-08-15 14:28:22 +0000371
Benjamin Petersone41251e2008-04-25 01:59:09 +0000372 If your application doesn't care whether the parameter was encoded as in
373 :rfc:`2231`, you can collapse the parameter value by calling
Georg Brandl540b45c2009-04-27 16:45:26 +0000374 :func:`email.utils.collapse_rfc2231_value`, passing in the return value
Benjamin Petersone41251e2008-04-25 01:59:09 +0000375 from :meth:`get_param`. This will return a suitably decoded Unicode
R. David Murrayccb9d052010-12-13 23:57:01 +0000376 string when the value is a tuple, or the original string unquoted if it
Benjamin Petersone41251e2008-04-25 01:59:09 +0000377 isn't. For example::
Georg Brandl116aa622007-08-15 14:28:22 +0000378
Benjamin Petersone41251e2008-04-25 01:59:09 +0000379 rawparam = msg.get_param('foo')
Georg Brandl540b45c2009-04-27 16:45:26 +0000380 param = email.utils.collapse_rfc2231_value(rawparam)
Georg Brandl116aa622007-08-15 14:28:22 +0000381
Benjamin Petersone41251e2008-04-25 01:59:09 +0000382 In any case, the parameter value (either the returned string, or the
383 ``VALUE`` item in the 3-tuple) is always unquoted, unless *unquote* is set
384 to ``False``.
Georg Brandl116aa622007-08-15 14:28:22 +0000385
Georg Brandl116aa622007-08-15 14:28:22 +0000386
Georg Brandl3f076d82009-05-17 11:28:33 +0000387 .. method:: set_param(param, value, header='Content-Type', requote=True, charset=None, language='')
Georg Brandl116aa622007-08-15 14:28:22 +0000388
Benjamin Petersone41251e2008-04-25 01:59:09 +0000389 Set a parameter in the :mailheader:`Content-Type` header. If the
390 parameter already exists in the header, its value will be replaced with
391 *value*. If the :mailheader:`Content-Type` header as not yet been defined
392 for this message, it will be set to :mimetype:`text/plain` and the new
393 parameter value will be appended as per :rfc:`2045`.
Georg Brandl116aa622007-08-15 14:28:22 +0000394
Benjamin Petersone41251e2008-04-25 01:59:09 +0000395 Optional *header* specifies an alternative header to
396 :mailheader:`Content-Type`, and all parameters will be quoted as necessary
397 unless optional *requote* is ``False`` (the default is ``True``).
Georg Brandl116aa622007-08-15 14:28:22 +0000398
Benjamin Petersone41251e2008-04-25 01:59:09 +0000399 If optional *charset* is specified, the parameter will be encoded
400 according to :rfc:`2231`. Optional *language* specifies the RFC 2231
401 language, defaulting to the empty string. Both *charset* and *language*
402 should be strings.
Georg Brandl116aa622007-08-15 14:28:22 +0000403
Georg Brandl116aa622007-08-15 14:28:22 +0000404
Georg Brandl3f076d82009-05-17 11:28:33 +0000405 .. method:: del_param(param, header='content-type', requote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000406
Benjamin Petersone41251e2008-04-25 01:59:09 +0000407 Remove the given parameter completely from the :mailheader:`Content-Type`
408 header. The header will be re-written in place without the parameter or
409 its value. All values will be quoted as necessary unless *requote* is
410 ``False`` (the default is ``True``). Optional *header* specifies an
411 alternative to :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000412
Georg Brandl116aa622007-08-15 14:28:22 +0000413
Georg Brandl3f076d82009-05-17 11:28:33 +0000414 .. method:: set_type(type, header='Content-Type', requote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000415
Benjamin Petersone41251e2008-04-25 01:59:09 +0000416 Set the main type and subtype for the :mailheader:`Content-Type`
417 header. *type* must be a string in the form :mimetype:`maintype/subtype`,
418 otherwise a :exc:`ValueError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000419
Benjamin Petersone41251e2008-04-25 01:59:09 +0000420 This method replaces the :mailheader:`Content-Type` header, keeping all
421 the parameters in place. If *requote* is ``False``, this leaves the
422 existing header's quoting as is, otherwise the parameters will be quoted
423 (the default).
Georg Brandl116aa622007-08-15 14:28:22 +0000424
Benjamin Petersone41251e2008-04-25 01:59:09 +0000425 An alternative header can be specified in the *header* argument. When the
426 :mailheader:`Content-Type` header is set a :mailheader:`MIME-Version`
427 header is also added.
Georg Brandl116aa622007-08-15 14:28:22 +0000428
Georg Brandl116aa622007-08-15 14:28:22 +0000429
Georg Brandl3f076d82009-05-17 11:28:33 +0000430 .. method:: get_filename(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000431
Benjamin Petersone41251e2008-04-25 01:59:09 +0000432 Return the value of the ``filename`` parameter of the
433 :mailheader:`Content-Disposition` header of the message. If the header
434 does not have a ``filename`` parameter, this method falls back to looking
R. David Murray9fc20532010-03-04 17:43:40 +0000435 for the ``name`` parameter on the :mailheader:`Content-Type` header. If
436 neither is found, or the header is missing, then *failobj* is returned.
437 The returned string will always be unquoted as per
438 :func:`email.utils.unquote`.
Georg Brandl116aa622007-08-15 14:28:22 +0000439
440
Georg Brandl3f076d82009-05-17 11:28:33 +0000441 .. method:: get_boundary(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000442
Benjamin Petersone41251e2008-04-25 01:59:09 +0000443 Return the value of the ``boundary`` parameter of the
444 :mailheader:`Content-Type` header of the message, or *failobj* if either
445 the header is missing, or has no ``boundary`` parameter. The returned
Georg Brandl540b45c2009-04-27 16:45:26 +0000446 string will always be unquoted as per :func:`email.utils.unquote`.
Georg Brandl116aa622007-08-15 14:28:22 +0000447
448
Benjamin Petersone41251e2008-04-25 01:59:09 +0000449 .. method:: set_boundary(boundary)
Georg Brandl116aa622007-08-15 14:28:22 +0000450
Benjamin Petersone41251e2008-04-25 01:59:09 +0000451 Set the ``boundary`` parameter of the :mailheader:`Content-Type` header to
452 *boundary*. :meth:`set_boundary` will always quote *boundary* if
453 necessary. A :exc:`HeaderParseError` is raised if the message object has
454 no :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000455
Benjamin Petersone41251e2008-04-25 01:59:09 +0000456 Note that using this method is subtly different than deleting the old
457 :mailheader:`Content-Type` header and adding a new one with the new
458 boundary via :meth:`add_header`, because :meth:`set_boundary` preserves
459 the order of the :mailheader:`Content-Type` header in the list of
460 headers. However, it does *not* preserve any continuation lines which may
461 have been present in the original :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000462
463
Georg Brandl3f076d82009-05-17 11:28:33 +0000464 .. method:: get_content_charset(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000465
Benjamin Petersone41251e2008-04-25 01:59:09 +0000466 Return the ``charset`` parameter of the :mailheader:`Content-Type` header,
467 coerced to lower case. If there is no :mailheader:`Content-Type` header, or if
468 that header has no ``charset`` parameter, *failobj* is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000469
Benjamin Petersone41251e2008-04-25 01:59:09 +0000470 Note that this method differs from :meth:`get_charset` which returns the
Georg Brandl3638e482009-04-27 16:46:17 +0000471 :class:`~email.charset.Charset` instance for the default encoding of the message body.
Georg Brandl116aa622007-08-15 14:28:22 +0000472
Georg Brandl116aa622007-08-15 14:28:22 +0000473
Georg Brandl3f076d82009-05-17 11:28:33 +0000474 .. method:: get_charsets(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000475
Benjamin Petersone41251e2008-04-25 01:59:09 +0000476 Return a list containing the character set names in the message. If the
477 message is a :mimetype:`multipart`, then the list will contain one element
478 for each subpart in the payload, otherwise, it will be a list of length 1.
Georg Brandl116aa622007-08-15 14:28:22 +0000479
Benjamin Petersone41251e2008-04-25 01:59:09 +0000480 Each item in the list will be a string which is the value of the
481 ``charset`` parameter in the :mailheader:`Content-Type` header for the
482 represented subpart. However, if the subpart has no
483 :mailheader:`Content-Type` header, no ``charset`` parameter, or is not of
484 the :mimetype:`text` main MIME type, then that item in the returned list
485 will be *failobj*.
Georg Brandl116aa622007-08-15 14:28:22 +0000486
487
Benjamin Petersone41251e2008-04-25 01:59:09 +0000488 .. method:: walk()
Georg Brandl116aa622007-08-15 14:28:22 +0000489
Benjamin Petersone41251e2008-04-25 01:59:09 +0000490 The :meth:`walk` method is an all-purpose generator which can be used to
491 iterate over all the parts and subparts of a message object tree, in
492 depth-first traversal order. You will typically use :meth:`walk` as the
493 iterator in a ``for`` loop; each iteration returns the next subpart.
Georg Brandl116aa622007-08-15 14:28:22 +0000494
Benjamin Petersone41251e2008-04-25 01:59:09 +0000495 Here's an example that prints the MIME type of every part of a multipart
496 message structure::
Georg Brandl116aa622007-08-15 14:28:22 +0000497
Benjamin Petersone41251e2008-04-25 01:59:09 +0000498 >>> for part in msg.walk():
499 ... print(part.get_content_type())
500 multipart/report
501 text/plain
502 message/delivery-status
503 text/plain
504 text/plain
505 message/rfc822
Georg Brandl116aa622007-08-15 14:28:22 +0000506
Benjamin Petersone41251e2008-04-25 01:59:09 +0000507 :class:`Message` objects can also optionally contain two instance attributes,
508 which can be used when generating the plain text of a MIME message.
Georg Brandl116aa622007-08-15 14:28:22 +0000509
510
Benjamin Petersone41251e2008-04-25 01:59:09 +0000511 .. attribute:: preamble
Georg Brandl116aa622007-08-15 14:28:22 +0000512
Benjamin Petersone41251e2008-04-25 01:59:09 +0000513 The format of a MIME document allows for some text between the blank line
514 following the headers, and the first multipart boundary string. Normally,
515 this text is never visible in a MIME-aware mail reader because it falls
516 outside the standard MIME armor. However, when viewing the raw text of
517 the message, or when viewing the message in a non-MIME aware reader, this
518 text can become visible.
Georg Brandl116aa622007-08-15 14:28:22 +0000519
Benjamin Petersone41251e2008-04-25 01:59:09 +0000520 The *preamble* attribute contains this leading extra-armor text for MIME
Georg Brandl3638e482009-04-27 16:46:17 +0000521 documents. When the :class:`~email.parser.Parser` discovers some text
522 after the headers but before the first boundary string, it assigns this
523 text to the message's *preamble* attribute. When the
524 :class:`~email.generator.Generator` is writing out the plain text
525 representation of a MIME message, and it finds the
Benjamin Petersone41251e2008-04-25 01:59:09 +0000526 message has a *preamble* attribute, it will write this text in the area
527 between the headers and the first boundary. See :mod:`email.parser` and
528 :mod:`email.generator` for details.
Georg Brandl116aa622007-08-15 14:28:22 +0000529
Benjamin Petersone41251e2008-04-25 01:59:09 +0000530 Note that if the message object has no preamble, the *preamble* attribute
531 will be ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000532
533
Benjamin Petersone41251e2008-04-25 01:59:09 +0000534 .. attribute:: epilogue
Georg Brandl116aa622007-08-15 14:28:22 +0000535
Benjamin Petersone41251e2008-04-25 01:59:09 +0000536 The *epilogue* attribute acts the same way as the *preamble* attribute,
537 except that it contains text that appears between the last boundary and
538 the end of the message.
Georg Brandl116aa622007-08-15 14:28:22 +0000539
Benjamin Petersone41251e2008-04-25 01:59:09 +0000540 You do not need to set the epilogue to the empty string in order for the
541 :class:`Generator` to print a newline at the end of the file.
Georg Brandl116aa622007-08-15 14:28:22 +0000542
543
Benjamin Petersone41251e2008-04-25 01:59:09 +0000544 .. attribute:: defects
Georg Brandl116aa622007-08-15 14:28:22 +0000545
Benjamin Petersone41251e2008-04-25 01:59:09 +0000546 The *defects* attribute contains a list of all the problems found when
547 parsing this message. See :mod:`email.errors` for a detailed description
548 of the possible parsing defects.