blob: 93dda698b240c75ea188177126f16e3bebc79f14 [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.
43 *unixfrom* defaults to ``False``.
Georg Brandl116aa622007-08-15 14:28:22 +000044
Benjamin Petersone41251e2008-04-25 01:59:09 +000045 Note that this method is provided as a convenience and may not always
46 format the message the way you want. For example, by default it mangles
47 lines that begin with ``From``. For more flexibility, instantiate a
Georg Brandl3638e482009-04-27 16:46:17 +000048 :class:`~email.generator.Generator` instance and use its :meth:`flatten`
49 method directly. For example::
Georg Brandl116aa622007-08-15 14:28:22 +000050
Georg Brandl03124942008-06-10 15:50:56 +000051 from io import StringIO
Benjamin Petersone41251e2008-04-25 01:59:09 +000052 from email.generator import Generator
53 fp = StringIO()
54 g = Generator(fp, mangle_from_=False, maxheaderlen=60)
55 g.flatten(msg)
56 text = fp.getvalue()
Georg Brandl116aa622007-08-15 14:28:22 +000057
58
Benjamin Petersone41251e2008-04-25 01:59:09 +000059 .. method:: __str__()
Georg Brandl116aa622007-08-15 14:28:22 +000060
Benjamin Petersone41251e2008-04-25 01:59:09 +000061 Equivalent to ``as_string(unixfrom=True)``.
Georg Brandl116aa622007-08-15 14:28:22 +000062
63
Benjamin Petersone41251e2008-04-25 01:59:09 +000064 .. method:: is_multipart()
Georg Brandl116aa622007-08-15 14:28:22 +000065
Benjamin Petersone41251e2008-04-25 01:59:09 +000066 Return ``True`` if the message's payload is a list of sub-\
67 :class:`Message` objects, otherwise return ``False``. When
68 :meth:`is_multipart` returns False, the payload should be a string object.
Georg Brandl116aa622007-08-15 14:28:22 +000069
70
Benjamin Petersone41251e2008-04-25 01:59:09 +000071 .. method:: set_unixfrom(unixfrom)
Georg Brandl116aa622007-08-15 14:28:22 +000072
Benjamin Petersone41251e2008-04-25 01:59:09 +000073 Set the message's envelope header to *unixfrom*, which should be a string.
Georg Brandl116aa622007-08-15 14:28:22 +000074
75
Benjamin Petersone41251e2008-04-25 01:59:09 +000076 .. method:: get_unixfrom()
Georg Brandl116aa622007-08-15 14:28:22 +000077
Benjamin Petersone41251e2008-04-25 01:59:09 +000078 Return the message's envelope header. Defaults to ``None`` if the
79 envelope header was never set.
Georg Brandl116aa622007-08-15 14:28:22 +000080
81
Benjamin Petersone41251e2008-04-25 01:59:09 +000082 .. method:: attach(payload)
Georg Brandl116aa622007-08-15 14:28:22 +000083
Benjamin Petersone41251e2008-04-25 01:59:09 +000084 Add the given *payload* to the current payload, which must be ``None`` or
85 a list of :class:`Message` objects before the call. After the call, the
86 payload will always be a list of :class:`Message` objects. If you want to
87 set the payload to a scalar object (e.g. a string), use
88 :meth:`set_payload` instead.
Georg Brandl116aa622007-08-15 14:28:22 +000089
90
Georg Brandl3f076d82009-05-17 11:28:33 +000091 .. method:: get_payload(i=None, decode=False)
Georg Brandl116aa622007-08-15 14:28:22 +000092
Benjamin Petersond6313712008-07-31 16:23:04 +000093 Return the current payload, which will be a list of
Benjamin Petersone41251e2008-04-25 01:59:09 +000094 :class:`Message` objects when :meth:`is_multipart` is ``True``, or a
95 string when :meth:`is_multipart` is ``False``. If the payload is a list
96 and you mutate the list object, you modify the message's payload in place.
Georg Brandl116aa622007-08-15 14:28:22 +000097
Benjamin Petersone41251e2008-04-25 01:59:09 +000098 With optional argument *i*, :meth:`get_payload` will return the *i*-th
99 element of the payload, counting from zero, if :meth:`is_multipart` is
100 ``True``. An :exc:`IndexError` will be raised if *i* is less than 0 or
101 greater than or equal to the number of items in the payload. If the
102 payload is a string (i.e. :meth:`is_multipart` is ``False``) and *i* is
103 given, a :exc:`TypeError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000104
Benjamin Petersone41251e2008-04-25 01:59:09 +0000105 Optional *decode* is a flag indicating whether the payload should be
106 decoded or not, according to the :mailheader:`Content-Transfer-Encoding`
107 header. When ``True`` and the message is not a multipart, the payload will
108 be decoded if this header's value is ``quoted-printable`` or ``base64``.
109 If some other encoding is used, or :mailheader:`Content-Transfer-Encoding`
110 header is missing, or if the payload has bogus base64 data, the payload is
111 returned as-is (undecoded). If the message is a multipart and the
112 *decode* flag is ``True``, then ``None`` is returned. The default for
113 *decode* is ``False``.
Georg Brandl116aa622007-08-15 14:28:22 +0000114
115
Georg Brandl3f076d82009-05-17 11:28:33 +0000116 .. method:: set_payload(payload, charset=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000117
Benjamin Petersone41251e2008-04-25 01:59:09 +0000118 Set the entire message object's payload to *payload*. It is the client's
119 responsibility to ensure the payload invariants. Optional *charset* sets
120 the message's default character set; see :meth:`set_charset` for details.
Georg Brandl116aa622007-08-15 14:28:22 +0000121
Benjamin Petersone41251e2008-04-25 01:59:09 +0000122 .. method:: set_charset(charset)
Georg Brandl116aa622007-08-15 14:28:22 +0000123
Benjamin Petersone41251e2008-04-25 01:59:09 +0000124 Set the character set of the payload to *charset*, which can either be a
Georg Brandl3638e482009-04-27 16:46:17 +0000125 :class:`~email.charset.Charset` instance (see :mod:`email.charset`), a
126 string naming a character set, or ``None``. If it is a string, it will
127 be converted to a :class:`~email.charset.Charset` instance. If *charset*
128 is ``None``, the ``charset`` parameter will be removed from the
129 :mailheader:`Content-Type` header. Anything else will generate a
130 :exc:`TypeError`.
Georg Brandl116aa622007-08-15 14:28:22 +0000131
Benjamin Petersone41251e2008-04-25 01:59:09 +0000132 The message will be assumed to be of type :mimetype:`text/\*` encoded with
133 *charset.input_charset*. It will be converted to *charset.output_charset*
134 and encoded properly, if needed, when generating the plain text
135 representation of the message. MIME headers (:mailheader:`MIME-Version`,
136 :mailheader:`Content-Type`, :mailheader:`Content-Transfer-Encoding`) will
137 be added as needed.
Georg Brandl116aa622007-08-15 14:28:22 +0000138
Benjamin Petersone41251e2008-04-25 01:59:09 +0000139 .. method:: get_charset()
Georg Brandl116aa622007-08-15 14:28:22 +0000140
Georg Brandl3638e482009-04-27 16:46:17 +0000141 Return the :class:`~email.charset.Charset` instance associated with the
142 message's payload.
Georg Brandl116aa622007-08-15 14:28:22 +0000143
Benjamin Petersone41251e2008-04-25 01:59:09 +0000144 The following methods implement a mapping-like interface for accessing the
145 message's :rfc:`2822` headers. Note that there are some semantic differences
146 between these methods and a normal mapping (i.e. dictionary) interface. For
147 example, in a dictionary there are no duplicate keys, but here there may be
148 duplicate message headers. Also, in dictionaries there is no guaranteed
149 order to the keys returned by :meth:`keys`, but in a :class:`Message` object,
150 headers are always returned in the order they appeared in the original
151 message, or were added to the message later. Any header deleted and then
152 re-added are always appended to the end of the header list.
Georg Brandl116aa622007-08-15 14:28:22 +0000153
Benjamin Petersone41251e2008-04-25 01:59:09 +0000154 These semantic differences are intentional and are biased toward maximal
155 convenience.
Georg Brandl116aa622007-08-15 14:28:22 +0000156
Benjamin Petersone41251e2008-04-25 01:59:09 +0000157 Note that in all cases, any envelope header present in the message is not
158 included in the mapping interface.
Georg Brandl116aa622007-08-15 14:28:22 +0000159
160
Benjamin Petersone41251e2008-04-25 01:59:09 +0000161 .. method:: __len__()
Georg Brandl116aa622007-08-15 14:28:22 +0000162
Benjamin Petersone41251e2008-04-25 01:59:09 +0000163 Return the total number of headers, including duplicates.
Georg Brandl116aa622007-08-15 14:28:22 +0000164
165
Benjamin Petersone41251e2008-04-25 01:59:09 +0000166 .. method:: __contains__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000167
Benjamin Petersone41251e2008-04-25 01:59:09 +0000168 Return true if the message object has a field named *name*. Matching is
169 done case-insensitively and *name* should not include the trailing colon.
170 Used for the ``in`` operator, e.g.::
Georg Brandl116aa622007-08-15 14:28:22 +0000171
Benjamin Petersone41251e2008-04-25 01:59:09 +0000172 if 'message-id' in myMessage:
173 print('Message-ID:', myMessage['message-id'])
Georg Brandl116aa622007-08-15 14:28:22 +0000174
175
Benjamin Petersone41251e2008-04-25 01:59:09 +0000176 .. method:: __getitem__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000177
Benjamin Petersone41251e2008-04-25 01:59:09 +0000178 Return the value of the named header field. *name* should not include the
179 colon field separator. If the header is missing, ``None`` is returned; a
180 :exc:`KeyError` is never raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000181
Benjamin Petersone41251e2008-04-25 01:59:09 +0000182 Note that if the named field appears more than once in the message's
183 headers, exactly which of those field values will be returned is
184 undefined. Use the :meth:`get_all` method to get the values of all the
185 extant named headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000186
187
Benjamin Petersone41251e2008-04-25 01:59:09 +0000188 .. method:: __setitem__(name, val)
Georg Brandl116aa622007-08-15 14:28:22 +0000189
Benjamin Petersone41251e2008-04-25 01:59:09 +0000190 Add a header to the message with field name *name* and value *val*. The
191 field is appended to the end of the message's existing fields.
Georg Brandl116aa622007-08-15 14:28:22 +0000192
Benjamin Petersone41251e2008-04-25 01:59:09 +0000193 Note that this does *not* overwrite or delete any existing header with the same
194 name. If you want to ensure that the new header is the only one present in the
195 message with field name *name*, delete the field first, e.g.::
Georg Brandl116aa622007-08-15 14:28:22 +0000196
Benjamin Petersone41251e2008-04-25 01:59:09 +0000197 del msg['subject']
198 msg['subject'] = 'Python roolz!'
Georg Brandl116aa622007-08-15 14:28:22 +0000199
200
Benjamin Petersone41251e2008-04-25 01:59:09 +0000201 .. method:: __delitem__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000202
Benjamin Petersone41251e2008-04-25 01:59:09 +0000203 Delete all occurrences of the field with name *name* from the message's
Georg Brandl3f076d82009-05-17 11:28:33 +0000204 headers. No exception is raised if the named field isn't present in the
205 headers.
Georg Brandl116aa622007-08-15 14:28:22 +0000206
207
Benjamin Petersone41251e2008-04-25 01:59:09 +0000208 .. method:: Message.__contains__(name)
Georg Brandl116aa622007-08-15 14:28:22 +0000209
Benjamin Petersone41251e2008-04-25 01:59:09 +0000210 Return true if the message contains a header field named *name*, otherwise
211 return false.
Georg Brandl116aa622007-08-15 14:28:22 +0000212
213
Benjamin Petersone41251e2008-04-25 01:59:09 +0000214 .. method:: keys()
Georg Brandl116aa622007-08-15 14:28:22 +0000215
Benjamin Petersone41251e2008-04-25 01:59:09 +0000216 Return a list of all the message's header field names.
Georg Brandl116aa622007-08-15 14:28:22 +0000217
218
Benjamin Petersone41251e2008-04-25 01:59:09 +0000219 .. method:: values()
Georg Brandl116aa622007-08-15 14:28:22 +0000220
Benjamin Petersone41251e2008-04-25 01:59:09 +0000221 Return a list of all the message's field values.
Georg Brandl116aa622007-08-15 14:28:22 +0000222
223
Benjamin Petersone41251e2008-04-25 01:59:09 +0000224 .. method:: items()
Georg Brandl116aa622007-08-15 14:28:22 +0000225
Benjamin Petersone41251e2008-04-25 01:59:09 +0000226 Return a list of 2-tuples containing all the message's field headers and
227 values.
Georg Brandl116aa622007-08-15 14:28:22 +0000228
229
Georg Brandl3f076d82009-05-17 11:28:33 +0000230 .. method:: get(name, failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000231
Benjamin Petersone41251e2008-04-25 01:59:09 +0000232 Return the value of the named header field. This is identical to
233 :meth:`__getitem__` except that optional *failobj* is returned if the
234 named header is missing (defaults to ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000235
Benjamin Petersone41251e2008-04-25 01:59:09 +0000236 Here are some additional useful methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000237
238
Georg Brandl3f076d82009-05-17 11:28:33 +0000239 .. method:: get_all(name, failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000240
Benjamin Petersone41251e2008-04-25 01:59:09 +0000241 Return a list of all the values for the field named *name*. If there are
242 no such named headers in the message, *failobj* is returned (defaults to
243 ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000244
245
Benjamin Petersone41251e2008-04-25 01:59:09 +0000246 .. method:: add_header(_name, _value, **_params)
Georg Brandl116aa622007-08-15 14:28:22 +0000247
Benjamin Petersone41251e2008-04-25 01:59:09 +0000248 Extended header setting. This method is similar to :meth:`__setitem__`
249 except that additional header parameters can be provided as keyword
250 arguments. *_name* is the header field to add and *_value* is the
251 *primary* value for the header.
Georg Brandl116aa622007-08-15 14:28:22 +0000252
Benjamin Petersone41251e2008-04-25 01:59:09 +0000253 For each item in the keyword argument dictionary *_params*, the key is
254 taken as the parameter name, with underscores converted to dashes (since
255 dashes are illegal in Python identifiers). Normally, the parameter will
256 be added as ``key="value"`` unless the value is ``None``, in which case
257 only the key will be added.
Georg Brandl116aa622007-08-15 14:28:22 +0000258
Benjamin Petersone41251e2008-04-25 01:59:09 +0000259 Here's an example::
Georg Brandl116aa622007-08-15 14:28:22 +0000260
Benjamin Petersone41251e2008-04-25 01:59:09 +0000261 msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')
Georg Brandl116aa622007-08-15 14:28:22 +0000262
Benjamin Petersone41251e2008-04-25 01:59:09 +0000263 This will add a header that looks like ::
Georg Brandl116aa622007-08-15 14:28:22 +0000264
Benjamin Petersone41251e2008-04-25 01:59:09 +0000265 Content-Disposition: attachment; filename="bud.gif"
Georg Brandl116aa622007-08-15 14:28:22 +0000266
267
Benjamin Petersone41251e2008-04-25 01:59:09 +0000268 .. method:: replace_header(_name, _value)
Georg Brandl116aa622007-08-15 14:28:22 +0000269
Benjamin Petersone41251e2008-04-25 01:59:09 +0000270 Replace a header. Replace the first header found in the message that
271 matches *_name*, retaining header order and field name case. If no
272 matching header was found, a :exc:`KeyError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000273
Georg Brandl116aa622007-08-15 14:28:22 +0000274
Benjamin Petersone41251e2008-04-25 01:59:09 +0000275 .. method:: get_content_type()
Georg Brandl116aa622007-08-15 14:28:22 +0000276
Benjamin Petersone41251e2008-04-25 01:59:09 +0000277 Return the message's content type. The returned string is coerced to
278 lower case of the form :mimetype:`maintype/subtype`. If there was no
279 :mailheader:`Content-Type` header in the message the default type as given
280 by :meth:`get_default_type` will be returned. Since according to
281 :rfc:`2045`, messages always have a default type, :meth:`get_content_type`
282 will always return a value.
Georg Brandl116aa622007-08-15 14:28:22 +0000283
Benjamin Petersone41251e2008-04-25 01:59:09 +0000284 :rfc:`2045` defines a message's default type to be :mimetype:`text/plain`
285 unless it appears inside a :mimetype:`multipart/digest` container, in
286 which case it would be :mimetype:`message/rfc822`. If the
287 :mailheader:`Content-Type` header has an invalid type specification,
288 :rfc:`2045` mandates that the default type be :mimetype:`text/plain`.
Georg Brandl116aa622007-08-15 14:28:22 +0000289
Georg Brandl116aa622007-08-15 14:28:22 +0000290
Benjamin Petersone41251e2008-04-25 01:59:09 +0000291 .. method:: get_content_maintype()
Georg Brandl116aa622007-08-15 14:28:22 +0000292
Benjamin Petersone41251e2008-04-25 01:59:09 +0000293 Return the message's main content type. This is the :mimetype:`maintype`
294 part of the string returned by :meth:`get_content_type`.
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_subtype()
Georg Brandl116aa622007-08-15 14:28:22 +0000298
Benjamin Petersone41251e2008-04-25 01:59:09 +0000299 Return the message's sub-content type. This is the :mimetype:`subtype`
300 part of the string returned by :meth:`get_content_type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000301
Georg Brandl116aa622007-08-15 14:28:22 +0000302
Benjamin Petersone41251e2008-04-25 01:59:09 +0000303 .. method:: get_default_type()
Georg Brandl116aa622007-08-15 14:28:22 +0000304
Benjamin Petersone41251e2008-04-25 01:59:09 +0000305 Return the default content type. Most messages have a default content
306 type of :mimetype:`text/plain`, except for messages that are subparts of
307 :mimetype:`multipart/digest` containers. Such subparts have a default
308 content type of :mimetype:`message/rfc822`.
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:: set_default_type(ctype)
Georg Brandl116aa622007-08-15 14:28:22 +0000312
Benjamin Petersone41251e2008-04-25 01:59:09 +0000313 Set the default content type. *ctype* should either be
314 :mimetype:`text/plain` or :mimetype:`message/rfc822`, although this is not
315 enforced. The default content type is not stored in the
316 :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000317
Georg Brandl116aa622007-08-15 14:28:22 +0000318
Georg Brandl3f076d82009-05-17 11:28:33 +0000319 .. method:: get_params(failobj=None, header='content-type', unquote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000320
Benjamin Petersone41251e2008-04-25 01:59:09 +0000321 Return the message's :mailheader:`Content-Type` parameters, as a list.
322 The elements of the returned list are 2-tuples of key/value pairs, as
323 split on the ``'='`` sign. The left hand side of the ``'='`` is the key,
324 while the right hand side is the value. If there is no ``'='`` sign in
325 the parameter the value is the empty string, otherwise the value is as
326 described in :meth:`get_param` and is unquoted if optional *unquote* is
327 ``True`` (the default).
Georg Brandl116aa622007-08-15 14:28:22 +0000328
Benjamin Petersone41251e2008-04-25 01:59:09 +0000329 Optional *failobj* is the object to return if there is no
330 :mailheader:`Content-Type` header. Optional *header* is the header to
331 search instead of :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000332
Georg Brandl116aa622007-08-15 14:28:22 +0000333
Georg Brandl3f076d82009-05-17 11:28:33 +0000334 .. method:: get_param(param, failobj=None, header='content-type', unquote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000335
Benjamin Petersone41251e2008-04-25 01:59:09 +0000336 Return the value of the :mailheader:`Content-Type` header's parameter
337 *param* as a string. If the message has no :mailheader:`Content-Type`
338 header or if there is no such parameter, then *failobj* is returned
339 (defaults to ``None``).
Georg Brandl116aa622007-08-15 14:28:22 +0000340
Benjamin Petersone41251e2008-04-25 01:59:09 +0000341 Optional *header* if given, specifies the message header to use instead of
342 :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000343
Benjamin Petersone41251e2008-04-25 01:59:09 +0000344 Parameter keys are always compared case insensitively. The return value
345 can either be a string, or a 3-tuple if the parameter was :rfc:`2231`
346 encoded. When it's a 3-tuple, the elements of the value are of the form
347 ``(CHARSET, LANGUAGE, VALUE)``. Note that both ``CHARSET`` and
348 ``LANGUAGE`` can be ``None``, in which case you should consider ``VALUE``
349 to be encoded in the ``us-ascii`` charset. You can usually ignore
350 ``LANGUAGE``.
Georg Brandl116aa622007-08-15 14:28:22 +0000351
Benjamin Petersone41251e2008-04-25 01:59:09 +0000352 If your application doesn't care whether the parameter was encoded as in
353 :rfc:`2231`, you can collapse the parameter value by calling
Georg Brandl540b45c2009-04-27 16:45:26 +0000354 :func:`email.utils.collapse_rfc2231_value`, passing in the return value
Benjamin Petersone41251e2008-04-25 01:59:09 +0000355 from :meth:`get_param`. This will return a suitably decoded Unicode
356 string whn the value is a tuple, or the original string unquoted if it
357 isn't. For example::
Georg Brandl116aa622007-08-15 14:28:22 +0000358
Benjamin Petersone41251e2008-04-25 01:59:09 +0000359 rawparam = msg.get_param('foo')
Georg Brandl540b45c2009-04-27 16:45:26 +0000360 param = email.utils.collapse_rfc2231_value(rawparam)
Georg Brandl116aa622007-08-15 14:28:22 +0000361
Benjamin Petersone41251e2008-04-25 01:59:09 +0000362 In any case, the parameter value (either the returned string, or the
363 ``VALUE`` item in the 3-tuple) is always unquoted, unless *unquote* is set
364 to ``False``.
Georg Brandl116aa622007-08-15 14:28:22 +0000365
Georg Brandl116aa622007-08-15 14:28:22 +0000366
Georg Brandl3f076d82009-05-17 11:28:33 +0000367 .. method:: set_param(param, value, header='Content-Type', requote=True, charset=None, language='')
Georg Brandl116aa622007-08-15 14:28:22 +0000368
Benjamin Petersone41251e2008-04-25 01:59:09 +0000369 Set a parameter in the :mailheader:`Content-Type` header. If the
370 parameter already exists in the header, its value will be replaced with
371 *value*. If the :mailheader:`Content-Type` header as not yet been defined
372 for this message, it will be set to :mimetype:`text/plain` and the new
373 parameter value will be appended as per :rfc:`2045`.
Georg Brandl116aa622007-08-15 14:28:22 +0000374
Benjamin Petersone41251e2008-04-25 01:59:09 +0000375 Optional *header* specifies an alternative header to
376 :mailheader:`Content-Type`, and all parameters will be quoted as necessary
377 unless optional *requote* is ``False`` (the default is ``True``).
Georg Brandl116aa622007-08-15 14:28:22 +0000378
Benjamin Petersone41251e2008-04-25 01:59:09 +0000379 If optional *charset* is specified, the parameter will be encoded
380 according to :rfc:`2231`. Optional *language* specifies the RFC 2231
381 language, defaulting to the empty string. Both *charset* and *language*
382 should be strings.
Georg Brandl116aa622007-08-15 14:28:22 +0000383
Georg Brandl116aa622007-08-15 14:28:22 +0000384
Georg Brandl3f076d82009-05-17 11:28:33 +0000385 .. method:: del_param(param, header='content-type', requote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000386
Benjamin Petersone41251e2008-04-25 01:59:09 +0000387 Remove the given parameter completely from the :mailheader:`Content-Type`
388 header. The header will be re-written in place without the parameter or
389 its value. All values will be quoted as necessary unless *requote* is
390 ``False`` (the default is ``True``). Optional *header* specifies an
391 alternative to :mailheader:`Content-Type`.
Georg Brandl116aa622007-08-15 14:28:22 +0000392
Georg Brandl116aa622007-08-15 14:28:22 +0000393
Georg Brandl3f076d82009-05-17 11:28:33 +0000394 .. method:: set_type(type, header='Content-Type', requote=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000395
Benjamin Petersone41251e2008-04-25 01:59:09 +0000396 Set the main type and subtype for the :mailheader:`Content-Type`
397 header. *type* must be a string in the form :mimetype:`maintype/subtype`,
398 otherwise a :exc:`ValueError` is raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000399
Benjamin Petersone41251e2008-04-25 01:59:09 +0000400 This method replaces the :mailheader:`Content-Type` header, keeping all
401 the parameters in place. If *requote* is ``False``, this leaves the
402 existing header's quoting as is, otherwise the parameters will be quoted
403 (the default).
Georg Brandl116aa622007-08-15 14:28:22 +0000404
Benjamin Petersone41251e2008-04-25 01:59:09 +0000405 An alternative header can be specified in the *header* argument. When the
406 :mailheader:`Content-Type` header is set a :mailheader:`MIME-Version`
407 header is also added.
Georg Brandl116aa622007-08-15 14:28:22 +0000408
Georg Brandl116aa622007-08-15 14:28:22 +0000409
Georg Brandl3f076d82009-05-17 11:28:33 +0000410 .. method:: get_filename(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000411
Benjamin Petersone41251e2008-04-25 01:59:09 +0000412 Return the value of the ``filename`` parameter of the
413 :mailheader:`Content-Disposition` header of the message. If the header
414 does not have a ``filename`` parameter, this method falls back to looking
415 for the ``name`` parameter. If neither is found, or the header is
416 missing, then *failobj* is returned. The returned string will always be
Georg Brandl540b45c2009-04-27 16:45:26 +0000417 unquoted as per :func:`email.utils.unquote`.
Georg Brandl116aa622007-08-15 14:28:22 +0000418
419
Georg Brandl3f076d82009-05-17 11:28:33 +0000420 .. method:: get_boundary(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000421
Benjamin Petersone41251e2008-04-25 01:59:09 +0000422 Return the value of the ``boundary`` parameter of the
423 :mailheader:`Content-Type` header of the message, or *failobj* if either
424 the header is missing, or has no ``boundary`` parameter. The returned
Georg Brandl540b45c2009-04-27 16:45:26 +0000425 string will always be unquoted as per :func:`email.utils.unquote`.
Georg Brandl116aa622007-08-15 14:28:22 +0000426
427
Benjamin Petersone41251e2008-04-25 01:59:09 +0000428 .. method:: set_boundary(boundary)
Georg Brandl116aa622007-08-15 14:28:22 +0000429
Benjamin Petersone41251e2008-04-25 01:59:09 +0000430 Set the ``boundary`` parameter of the :mailheader:`Content-Type` header to
431 *boundary*. :meth:`set_boundary` will always quote *boundary* if
432 necessary. A :exc:`HeaderParseError` is raised if the message object has
433 no :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000434
Benjamin Petersone41251e2008-04-25 01:59:09 +0000435 Note that using this method is subtly different than deleting the old
436 :mailheader:`Content-Type` header and adding a new one with the new
437 boundary via :meth:`add_header`, because :meth:`set_boundary` preserves
438 the order of the :mailheader:`Content-Type` header in the list of
439 headers. However, it does *not* preserve any continuation lines which may
440 have been present in the original :mailheader:`Content-Type` header.
Georg Brandl116aa622007-08-15 14:28:22 +0000441
442
Georg Brandl3f076d82009-05-17 11:28:33 +0000443 .. method:: get_content_charset(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000444
Benjamin Petersone41251e2008-04-25 01:59:09 +0000445 Return the ``charset`` parameter of the :mailheader:`Content-Type` header,
446 coerced to lower case. If there is no :mailheader:`Content-Type` header, or if
447 that header has no ``charset`` parameter, *failobj* is returned.
Georg Brandl116aa622007-08-15 14:28:22 +0000448
Benjamin Petersone41251e2008-04-25 01:59:09 +0000449 Note that this method differs from :meth:`get_charset` which returns the
Georg Brandl3638e482009-04-27 16:46:17 +0000450 :class:`~email.charset.Charset` instance for the default encoding of the message body.
Georg Brandl116aa622007-08-15 14:28:22 +0000451
Georg Brandl116aa622007-08-15 14:28:22 +0000452
Georg Brandl3f076d82009-05-17 11:28:33 +0000453 .. method:: get_charsets(failobj=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000454
Benjamin Petersone41251e2008-04-25 01:59:09 +0000455 Return a list containing the character set names in the message. If the
456 message is a :mimetype:`multipart`, then the list will contain one element
457 for each subpart in the payload, otherwise, it will be a list of length 1.
Georg Brandl116aa622007-08-15 14:28:22 +0000458
Benjamin Petersone41251e2008-04-25 01:59:09 +0000459 Each item in the list will be a string which is the value of the
460 ``charset`` parameter in the :mailheader:`Content-Type` header for the
461 represented subpart. However, if the subpart has no
462 :mailheader:`Content-Type` header, no ``charset`` parameter, or is not of
463 the :mimetype:`text` main MIME type, then that item in the returned list
464 will be *failobj*.
Georg Brandl116aa622007-08-15 14:28:22 +0000465
466
Benjamin Petersone41251e2008-04-25 01:59:09 +0000467 .. method:: walk()
Georg Brandl116aa622007-08-15 14:28:22 +0000468
Benjamin Petersone41251e2008-04-25 01:59:09 +0000469 The :meth:`walk` method is an all-purpose generator which can be used to
470 iterate over all the parts and subparts of a message object tree, in
471 depth-first traversal order. You will typically use :meth:`walk` as the
472 iterator in a ``for`` loop; each iteration returns the next subpart.
Georg Brandl116aa622007-08-15 14:28:22 +0000473
Benjamin Petersone41251e2008-04-25 01:59:09 +0000474 Here's an example that prints the MIME type of every part of a multipart
475 message structure::
Georg Brandl116aa622007-08-15 14:28:22 +0000476
Benjamin Petersone41251e2008-04-25 01:59:09 +0000477 >>> for part in msg.walk():
478 ... print(part.get_content_type())
479 multipart/report
480 text/plain
481 message/delivery-status
482 text/plain
483 text/plain
484 message/rfc822
Georg Brandl116aa622007-08-15 14:28:22 +0000485
Benjamin Petersone41251e2008-04-25 01:59:09 +0000486 :class:`Message` objects can also optionally contain two instance attributes,
487 which can be used when generating the plain text of a MIME message.
Georg Brandl116aa622007-08-15 14:28:22 +0000488
489
Benjamin Petersone41251e2008-04-25 01:59:09 +0000490 .. attribute:: preamble
Georg Brandl116aa622007-08-15 14:28:22 +0000491
Benjamin Petersone41251e2008-04-25 01:59:09 +0000492 The format of a MIME document allows for some text between the blank line
493 following the headers, and the first multipart boundary string. Normally,
494 this text is never visible in a MIME-aware mail reader because it falls
495 outside the standard MIME armor. However, when viewing the raw text of
496 the message, or when viewing the message in a non-MIME aware reader, this
497 text can become visible.
Georg Brandl116aa622007-08-15 14:28:22 +0000498
Benjamin Petersone41251e2008-04-25 01:59:09 +0000499 The *preamble* attribute contains this leading extra-armor text for MIME
Georg Brandl3638e482009-04-27 16:46:17 +0000500 documents. When the :class:`~email.parser.Parser` discovers some text
501 after the headers but before the first boundary string, it assigns this
502 text to the message's *preamble* attribute. When the
503 :class:`~email.generator.Generator` is writing out the plain text
504 representation of a MIME message, and it finds the
Benjamin Petersone41251e2008-04-25 01:59:09 +0000505 message has a *preamble* attribute, it will write this text in the area
506 between the headers and the first boundary. See :mod:`email.parser` and
507 :mod:`email.generator` for details.
Georg Brandl116aa622007-08-15 14:28:22 +0000508
Benjamin Petersone41251e2008-04-25 01:59:09 +0000509 Note that if the message object has no preamble, the *preamble* attribute
510 will be ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000511
512
Benjamin Petersone41251e2008-04-25 01:59:09 +0000513 .. attribute:: epilogue
Georg Brandl116aa622007-08-15 14:28:22 +0000514
Benjamin Petersone41251e2008-04-25 01:59:09 +0000515 The *epilogue* attribute acts the same way as the *preamble* attribute,
516 except that it contains text that appears between the last boundary and
517 the end of the message.
Georg Brandl116aa622007-08-15 14:28:22 +0000518
Benjamin Petersone41251e2008-04-25 01:59:09 +0000519 You do not need to set the epilogue to the empty string in order for the
520 :class:`Generator` to print a newline at the end of the file.
Georg Brandl116aa622007-08-15 14:28:22 +0000521
522
Benjamin Petersone41251e2008-04-25 01:59:09 +0000523 .. attribute:: defects
Georg Brandl116aa622007-08-15 14:28:22 +0000524
Benjamin Petersone41251e2008-04-25 01:59:09 +0000525 The *defects* attribute contains a list of all the problems found when
526 parsing this message. See :mod:`email.errors` for a detailed description
527 of the possible parsing defects.