blob: 838bcf529aff2086990a32bb506e1b9eba708d8f [file] [log] [blame]
R David Murrayb42b6eb2012-05-27 17:13:54 -04001:mod:`email.message`: Representing an email message
2---------------------------------------------------
Georg Brandl8ec7f652007-08-15 14:28:01 +00003
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
Benjamin Petersonc7b05922008-04-25 01:29:10 +000039 .. method:: as_string([unixfrom])
Georg Brandl8ec7f652007-08-15 14:28:01 +000040
Benjamin Petersonc7b05922008-04-25 01:29:10 +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 Murray0e207df2010-01-10 17:41:28 +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 Brandl8ec7f652007-08-15 14:28:01 +000047
Benjamin Petersonc7b05922008-04-25 01:29:10 +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
Serhiy Storchakaf65d4542013-08-19 10:03:25 +030051 :class:`~email.generator.Generator` instance and use its
52 :meth:`~email.generator.Generator.flatten` method directly. For example::
Georg Brandl8ec7f652007-08-15 14:28:01 +000053
Benjamin Petersonc7b05922008-04-25 01:29:10 +000054 from cStringIO import StringIO
55 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 Brandl8ec7f652007-08-15 14:28:01 +000060
61
Benjamin Petersonc7b05922008-04-25 01:29:10 +000062 .. method:: __str__()
Georg Brandl8ec7f652007-08-15 14:28:01 +000063
Benjamin Petersonc7b05922008-04-25 01:29:10 +000064 Equivalent to ``as_string(unixfrom=True)``.
Georg Brandl8ec7f652007-08-15 14:28:01 +000065
66
Benjamin Petersonc7b05922008-04-25 01:29:10 +000067 .. method:: is_multipart()
Georg Brandl8ec7f652007-08-15 14:28:01 +000068
Benjamin Petersonc7b05922008-04-25 01:29:10 +000069 Return ``True`` if the message's payload is a list of sub-\
70 :class:`Message` objects, otherwise return ``False``. When
Serhiy Storchaka26d936a2013-11-29 12:16:53 +020071 :meth:`is_multipart` returns ``False``, the payload should be a string object.
Georg Brandl8ec7f652007-08-15 14:28:01 +000072
73
Benjamin Petersonc7b05922008-04-25 01:29:10 +000074 .. method:: set_unixfrom(unixfrom)
Georg Brandl8ec7f652007-08-15 14:28:01 +000075
Benjamin Petersonc7b05922008-04-25 01:29:10 +000076 Set the message's envelope header to *unixfrom*, which should be a string.
Georg Brandl8ec7f652007-08-15 14:28:01 +000077
78
Benjamin Petersonc7b05922008-04-25 01:29:10 +000079 .. method:: get_unixfrom()
Georg Brandl8ec7f652007-08-15 14:28:01 +000080
Benjamin Petersonc7b05922008-04-25 01:29:10 +000081 Return the message's envelope header. Defaults to ``None`` if the
82 envelope header was never set.
Georg Brandl8ec7f652007-08-15 14:28:01 +000083
84
Benjamin Petersonc7b05922008-04-25 01:29:10 +000085 .. method:: attach(payload)
Georg Brandl8ec7f652007-08-15 14:28:01 +000086
Benjamin Petersonc7b05922008-04-25 01:29:10 +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 Brandl8ec7f652007-08-15 14:28:01 +000092
93
Benjamin Petersonc7b05922008-04-25 01:29:10 +000094 .. method:: get_payload([i[, decode]])
Georg Brandl8ec7f652007-08-15 14:28:01 +000095
Andrew M. Kuchlingcd48d8a2008-07-26 13:09:06 +000096 Return the current payload, which will be a list of
Benjamin Petersonc7b05922008-04-25 01:29:10 +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 Brandl8ec7f652007-08-15 14:28:01 +0000100
Benjamin Petersonc7b05922008-04-25 01:29:10 +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 Brandl8ec7f652007-08-15 14:28:01 +0000107
Benjamin Petersonc7b05922008-04-25 01:29:10 +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 Brandl8ec7f652007-08-15 14:28:01 +0000117
118
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000119 .. method:: set_payload(payload[, charset])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000120
Benjamin Petersonc7b05922008-04-25 01:29:10 +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 Brandl8ec7f652007-08-15 14:28:01 +0000124
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000125 .. versionchanged:: 2.2.2
126 *charset* argument added.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000127
128
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000129 .. method:: set_charset(charset)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000130
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000131 Set the character set of the payload to *charset*, which can either be a
Georg Brandlb48327a2009-04-13 13:13:25 +0000132 :class:`~email.charset.Charset` instance (see :mod:`email.charset`), a
133 string naming a character set, or ``None``. If it is a string, it will
134 be converted to a :class:`~email.charset.Charset` instance. If *charset*
135 is ``None``, the ``charset`` parameter will be removed from the
R David Murrayab40e4c2011-03-15 18:01:04 -0400136 :mailheader:`Content-Type` header (the message will not be otherwise
137 modified). Anything else will generate a :exc:`TypeError`.
138
139 If there is no existing :mailheader:`MIME-Version` header one will be
140 added. If there is no existing :mailheader:`Content-Type` header, one
141 will be added with a value of :mimetype:`text/plain`. Whether the
142 :mailheader:`Content-Type` header already exists or not, its ``charset``
143 parameter will be set to *charset.output_charset*. If
144 *charset.input_charset* and *charset.output_charset* differ, the payload
145 will be re-encoded to the *output_charset*. If there is no existing
146 :mailheader:`Content-Transfer-Encoding` header, then the payload will be
147 transfer-encoded, if needed, using the specified
148 :class:`~email.charset.Charset`, and a header with the appropriate value
149 will be added. If a :mailheader:`Content-Transfer-Encoding` header
150 already exists, the payload is assumed to already be correctly encoded
151 using that :mailheader:`Content-Transfer-Encoding` and is not modified.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000152
R. David Murray52dcd452010-06-02 22:03:15 +0000153 The message will be assumed to be of type :mimetype:`text/\*`, with the
154 payload either in unicode or encoded with *charset.input_charset*.
155 It will be encoded or converted to *charset.output_charset*
156 and transfer encoded properly, if needed, when generating the plain text
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000157 representation of the message. MIME headers (:mailheader:`MIME-Version`,
158 :mailheader:`Content-Type`, :mailheader:`Content-Transfer-Encoding`) will
159 be added as needed.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000160
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000161 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +0000162
163
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000164 .. method:: get_charset()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000165
Georg Brandlb48327a2009-04-13 13:13:25 +0000166 Return the :class:`~email.charset.Charset` instance associated with the
167 message's payload.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000168
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000169 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +0000170
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000171 The following methods implement a mapping-like interface for accessing the
172 message's :rfc:`2822` headers. Note that there are some semantic differences
173 between these methods and a normal mapping (i.e. dictionary) interface. For
174 example, in a dictionary there are no duplicate keys, but here there may be
175 duplicate message headers. Also, in dictionaries there is no guaranteed
176 order to the keys returned by :meth:`keys`, but in a :class:`Message` object,
177 headers are always returned in the order they appeared in the original
178 message, or were added to the message later. Any header deleted and then
179 re-added are always appended to the end of the header list.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000180
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000181 These semantic differences are intentional and are biased toward maximal
182 convenience.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000183
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000184 Note that in all cases, any envelope header present in the message is not
185 included in the mapping interface.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000186
187
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000188 .. method:: __len__()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000189
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000190 Return the total number of headers, including duplicates.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000191
192
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000193 .. method:: __contains__(name)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000194
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000195 Return true if the message object has a field named *name*. Matching is
196 done case-insensitively and *name* should not include the trailing colon.
197 Used for the ``in`` operator, e.g.::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000198
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000199 if 'message-id' in myMessage:
200 print 'Message-ID:', myMessage['message-id']
Georg Brandl8ec7f652007-08-15 14:28:01 +0000201
202
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000203 .. method:: __getitem__(name)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000204
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000205 Return the value of the named header field. *name* should not include the
206 colon field separator. If the header is missing, ``None`` is returned; a
207 :exc:`KeyError` is never raised.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000208
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000209 Note that if the named field appears more than once in the message's
210 headers, exactly which of those field values will be returned is
211 undefined. Use the :meth:`get_all` method to get the values of all the
212 extant named headers.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000213
214
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000215 .. method:: __setitem__(name, val)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000216
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000217 Add a header to the message with field name *name* and value *val*. The
218 field is appended to the end of the message's existing fields.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000219
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000220 Note that this does *not* overwrite or delete any existing header with the same
221 name. If you want to ensure that the new header is the only one present in the
222 message with field name *name*, delete the field first, e.g.::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000223
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000224 del msg['subject']
225 msg['subject'] = 'Python roolz!'
Georg Brandl8ec7f652007-08-15 14:28:01 +0000226
227
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000228 .. method:: __delitem__(name)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000229
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000230 Delete all occurrences of the field with name *name* from the message's
231 headers. No exception is raised if the named field isn't present in the headers.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000232
233
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000234 .. method:: has_key(name)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000235
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000236 Return true if the message contains a header field named *name*, otherwise
237 return false.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000238
239
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000240 .. method:: keys()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000241
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000242 Return a list of all the message's header field names.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000243
244
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000245 .. method:: values()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000246
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000247 Return a list of all the message's field values.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000248
249
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000250 .. method:: items()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000251
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000252 Return a list of 2-tuples containing all the message's field headers and
253 values.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000254
255
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000256 .. method:: get(name[, failobj])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000257
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000258 Return the value of the named header field. This is identical to
259 :meth:`__getitem__` except that optional *failobj* is returned if the
260 named header is missing (defaults to ``None``).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000261
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000262 Here are some additional useful methods:
Georg Brandl8ec7f652007-08-15 14:28:01 +0000263
264
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000265 .. method:: get_all(name[, failobj])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000266
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000267 Return a list of all the values for the field named *name*. If there are
268 no such named headers in the message, *failobj* is returned (defaults to
269 ``None``).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000270
271
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000272 .. method:: add_header(_name, _value, **_params)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000273
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000274 Extended header setting. This method is similar to :meth:`__setitem__`
275 except that additional header parameters can be provided as keyword
276 arguments. *_name* is the header field to add and *_value* is the
277 *primary* value for the header.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000278
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000279 For each item in the keyword argument dictionary *_params*, the key is
280 taken as the parameter name, with underscores converted to dashes (since
281 dashes are illegal in Python identifiers). Normally, the parameter will
282 be added as ``key="value"`` unless the value is ``None``, in which case
R. David Murraya9aa34c2010-12-14 00:29:27 +0000283 only the key will be added. If the value contains non-ASCII characters,
284 it must be specified as a three tuple in the format
285 ``(CHARSET, LANGUAGE, VALUE)``, where ``CHARSET`` is a string naming the
286 charset to be used to encode the value, ``LANGUAGE`` can usually be set
287 to ``None`` or the empty string (see :RFC:`2231` for other possibilities),
288 and ``VALUE`` is the string value containing non-ASCII code points.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000289
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000290 Here's an example::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000291
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000292 msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')
Georg Brandl8ec7f652007-08-15 14:28:01 +0000293
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000294 This will add a header that looks like ::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000295
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000296 Content-Disposition: attachment; filename="bud.gif"
Georg Brandl8ec7f652007-08-15 14:28:01 +0000297
Ezio Melotti1e87da12011-10-19 10:39:35 +0300298 An example with non-ASCII characters::
R. David Murraya9aa34c2010-12-14 00:29:27 +0000299
300 msg.add_header('Content-Disposition', 'attachment',
301 filename=('iso-8859-1', '', 'Fußballer.ppt'))
302
303 Which produces ::
304
305 Content-Disposition: attachment; filename*="iso-8859-1''Fu%DFballer.ppt"
306
Georg Brandl8ec7f652007-08-15 14:28:01 +0000307
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000308 .. method:: replace_header(_name, _value)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000309
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000310 Replace a header. Replace the first header found in the message that
311 matches *_name*, retaining header order and field name case. If no
312 matching header was found, a :exc:`KeyError` is raised.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000313
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000314 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +0000315
316
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000317 .. method:: get_content_type()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000318
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000319 Return the message's content type. The returned string is coerced to
320 lower case of the form :mimetype:`maintype/subtype`. If there was no
321 :mailheader:`Content-Type` header in the message the default type as given
322 by :meth:`get_default_type` will be returned. Since according to
323 :rfc:`2045`, messages always have a default type, :meth:`get_content_type`
324 will always return a value.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000325
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000326 :rfc:`2045` defines a message's default type to be :mimetype:`text/plain`
327 unless it appears inside a :mimetype:`multipart/digest` container, in
328 which case it would be :mimetype:`message/rfc822`. If the
329 :mailheader:`Content-Type` header has an invalid type specification,
330 :rfc:`2045` mandates that the default type be :mimetype:`text/plain`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000331
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000332 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +0000333
Georg Brandl8ec7f652007-08-15 14:28:01 +0000334
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000335 .. method:: get_content_maintype()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000336
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000337 Return the message's main content type. This is the :mimetype:`maintype`
338 part of the string returned by :meth:`get_content_type`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000339
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000340 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +0000341
Georg Brandl8ec7f652007-08-15 14:28:01 +0000342
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000343 .. method:: get_content_subtype()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000344
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000345 Return the message's sub-content type. This is the :mimetype:`subtype`
346 part of the string returned by :meth:`get_content_type`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000347
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000348 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +0000349
Georg Brandl8ec7f652007-08-15 14:28:01 +0000350
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000351 .. method:: get_default_type()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000352
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000353 Return the default content type. Most messages have a default content
354 type of :mimetype:`text/plain`, except for messages that are subparts of
355 :mimetype:`multipart/digest` containers. Such subparts have a default
356 content type of :mimetype:`message/rfc822`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000357
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000358 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +0000359
Georg Brandl8ec7f652007-08-15 14:28:01 +0000360
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000361 .. method:: set_default_type(ctype)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000362
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000363 Set the default content type. *ctype* should either be
364 :mimetype:`text/plain` or :mimetype:`message/rfc822`, although this is not
365 enforced. The default content type is not stored in the
366 :mailheader:`Content-Type` header.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000367
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000368 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +0000369
Georg Brandl8ec7f652007-08-15 14:28:01 +0000370
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000371 .. method:: get_params([failobj[, header[, unquote]]])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000372
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000373 Return the message's :mailheader:`Content-Type` parameters, as a list.
374 The elements of the returned list are 2-tuples of key/value pairs, as
375 split on the ``'='`` sign. The left hand side of the ``'='`` is the key,
376 while the right hand side is the value. If there is no ``'='`` sign in
377 the parameter the value is the empty string, otherwise the value is as
378 described in :meth:`get_param` and is unquoted if optional *unquote* is
379 ``True`` (the default).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000380
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000381 Optional *failobj* is the object to return if there is no
382 :mailheader:`Content-Type` header. Optional *header* is the header to
383 search instead of :mailheader:`Content-Type`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000384
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000385 .. versionchanged:: 2.2.2
386 *unquote* argument added.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000387
Georg Brandl8ec7f652007-08-15 14:28:01 +0000388
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000389 .. method:: get_param(param[, failobj[, header[, unquote]]])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000390
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000391 Return the value of the :mailheader:`Content-Type` header's parameter
392 *param* as a string. If the message has no :mailheader:`Content-Type`
393 header or if there is no such parameter, then *failobj* is returned
394 (defaults to ``None``).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000395
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000396 Optional *header* if given, specifies the message header to use instead of
397 :mailheader:`Content-Type`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000398
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000399 Parameter keys are always compared case insensitively. The return value
400 can either be a string, or a 3-tuple if the parameter was :rfc:`2231`
401 encoded. When it's a 3-tuple, the elements of the value are of the form
402 ``(CHARSET, LANGUAGE, VALUE)``. Note that both ``CHARSET`` and
403 ``LANGUAGE`` can be ``None``, in which case you should consider ``VALUE``
404 to be encoded in the ``us-ascii`` charset. You can usually ignore
405 ``LANGUAGE``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000406
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000407 If your application doesn't care whether the parameter was encoded as in
408 :rfc:`2231`, you can collapse the parameter value by calling
Hirokazu Yamamoto3bd40582009-04-13 01:07:06 +0000409 :func:`email.utils.collapse_rfc2231_value`, passing in the return value
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000410 from :meth:`get_param`. This will return a suitably decoded Unicode
R. David Murraya9aa34c2010-12-14 00:29:27 +0000411 string when the value is a tuple, or the original string unquoted if it
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000412 isn't. For example::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000413
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000414 rawparam = msg.get_param('foo')
Hirokazu Yamamoto3bd40582009-04-13 01:07:06 +0000415 param = email.utils.collapse_rfc2231_value(rawparam)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000416
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000417 In any case, the parameter value (either the returned string, or the
418 ``VALUE`` item in the 3-tuple) is always unquoted, unless *unquote* is set
419 to ``False``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000420
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000421 .. versionchanged:: 2.2.2
422 *unquote* argument added, and 3-tuple return value possible.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000423
424
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000425 .. method:: set_param(param, value[, header[, requote[, charset[, language]]]])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000426
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000427 Set a parameter in the :mailheader:`Content-Type` header. If the
428 parameter already exists in the header, its value will be replaced with
429 *value*. If the :mailheader:`Content-Type` header as not yet been defined
430 for this message, it will be set to :mimetype:`text/plain` and the new
431 parameter value will be appended as per :rfc:`2045`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000432
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000433 Optional *header* specifies an alternative header to
434 :mailheader:`Content-Type`, and all parameters will be quoted as necessary
435 unless optional *requote* is ``False`` (the default is ``True``).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000436
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000437 If optional *charset* is specified, the parameter will be encoded
438 according to :rfc:`2231`. Optional *language* specifies the RFC 2231
439 language, defaulting to the empty string. Both *charset* and *language*
440 should be strings.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000441
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000442 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +0000443
444
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000445 .. method:: del_param(param[, header[, requote]])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000446
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000447 Remove the given parameter completely from the :mailheader:`Content-Type`
448 header. The header will be re-written in place without the parameter or
449 its value. All values will be quoted as necessary unless *requote* is
450 ``False`` (the default is ``True``). Optional *header* specifies an
451 alternative to :mailheader:`Content-Type`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000452
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000453 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +0000454
Georg Brandl8ec7f652007-08-15 14:28:01 +0000455
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000456 .. method:: set_type(type[, header][, requote])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000457
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000458 Set the main type and subtype for the :mailheader:`Content-Type`
459 header. *type* must be a string in the form :mimetype:`maintype/subtype`,
460 otherwise a :exc:`ValueError` is raised.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000461
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000462 This method replaces the :mailheader:`Content-Type` header, keeping all
463 the parameters in place. If *requote* is ``False``, this leaves the
464 existing header's quoting as is, otherwise the parameters will be quoted
465 (the default).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000466
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000467 An alternative header can be specified in the *header* argument. When the
468 :mailheader:`Content-Type` header is set a :mailheader:`MIME-Version`
469 header is also added.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000470
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000471 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +0000472
473
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000474 .. method:: get_filename([failobj])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000475
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000476 Return the value of the ``filename`` parameter of the
477 :mailheader:`Content-Disposition` header of the message. If the header
478 does not have a ``filename`` parameter, this method falls back to looking
R. David Murray3f3330f2010-03-04 17:34:05 +0000479 for the ``name`` parameter on the :mailheader:`Content-Type` header. If
480 neither is found, or the header is missing, then *failobj* is returned.
481 The returned string will always be unquoted as per
482 :func:`email.utils.unquote`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000483
Georg Brandl8ec7f652007-08-15 14:28:01 +0000484
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000485 .. method:: get_boundary([failobj])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000486
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000487 Return the value of the ``boundary`` parameter of the
488 :mailheader:`Content-Type` header of the message, or *failobj* if either
489 the header is missing, or has no ``boundary`` parameter. The returned
Hirokazu Yamamoto45857462009-04-13 01:21:56 +0000490 string will always be unquoted as per :func:`email.utils.unquote`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000491
Georg Brandl8ec7f652007-08-15 14:28:01 +0000492
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000493 .. method:: set_boundary(boundary)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000494
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000495 Set the ``boundary`` parameter of the :mailheader:`Content-Type` header to
496 *boundary*. :meth:`set_boundary` will always quote *boundary* if
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300497 necessary. A :exc:`~email.errors.HeaderParseError` is raised if the
498 message object has no :mailheader:`Content-Type` header.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000499
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000500 Note that using this method is subtly different than deleting the old
501 :mailheader:`Content-Type` header and adding a new one with the new
502 boundary via :meth:`add_header`, because :meth:`set_boundary` preserves
503 the order of the :mailheader:`Content-Type` header in the list of
504 headers. However, it does *not* preserve any continuation lines which may
505 have been present in the original :mailheader:`Content-Type` header.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000506
Georg Brandl8ec7f652007-08-15 14:28:01 +0000507
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000508 .. method:: get_content_charset([failobj])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000509
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000510 Return the ``charset`` parameter of the :mailheader:`Content-Type` header,
511 coerced to lower case. If there is no :mailheader:`Content-Type` header, or if
512 that header has no ``charset`` parameter, *failobj* is returned.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000513
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000514 Note that this method differs from :meth:`get_charset` which returns the
Georg Brandlb48327a2009-04-13 13:13:25 +0000515 :class:`~email.charset.Charset` instance for the default encoding of the message body.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000516
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000517 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +0000518
Georg Brandl8ec7f652007-08-15 14:28:01 +0000519
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000520 .. method:: get_charsets([failobj])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000521
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000522 Return a list containing the character set names in the message. If the
523 message is a :mimetype:`multipart`, then the list will contain one element
524 for each subpart in the payload, otherwise, it will be a list of length 1.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000525
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000526 Each item in the list will be a string which is the value of the
527 ``charset`` parameter in the :mailheader:`Content-Type` header for the
528 represented subpart. However, if the subpart has no
529 :mailheader:`Content-Type` header, no ``charset`` parameter, or is not of
530 the :mimetype:`text` main MIME type, then that item in the returned list
531 will be *failobj*.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000532
Georg Brandl8ec7f652007-08-15 14:28:01 +0000533
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000534 .. method:: walk()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000535
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000536 The :meth:`walk` method is an all-purpose generator which can be used to
537 iterate over all the parts and subparts of a message object tree, in
538 depth-first traversal order. You will typically use :meth:`walk` as the
539 iterator in a ``for`` loop; each iteration returns the next subpart.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000540
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000541 Here's an example that prints the MIME type of every part of a multipart
542 message structure::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000543
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000544 >>> for part in msg.walk():
545 ... print part.get_content_type()
546 multipart/report
547 text/plain
548 message/delivery-status
549 text/plain
550 text/plain
551 message/rfc822
Georg Brandl8ec7f652007-08-15 14:28:01 +0000552
553 .. versionchanged:: 2.5
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000554 The previously deprecated methods :meth:`get_type`, :meth:`get_main_type`, and
555 :meth:`get_subtype` were removed.
556
557 :class:`Message` objects can also optionally contain two instance attributes,
558 which can be used when generating the plain text of a MIME message.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000559
560
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000561 .. attribute:: preamble
Georg Brandl8ec7f652007-08-15 14:28:01 +0000562
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000563 The format of a MIME document allows for some text between the blank line
564 following the headers, and the first multipart boundary string. Normally,
565 this text is never visible in a MIME-aware mail reader because it falls
566 outside the standard MIME armor. However, when viewing the raw text of
567 the message, or when viewing the message in a non-MIME aware reader, this
568 text can become visible.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000569
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000570 The *preamble* attribute contains this leading extra-armor text for MIME
Georg Brandlb48327a2009-04-13 13:13:25 +0000571 documents. When the :class:`~email.parser.Parser` discovers some text
572 after the headers but before the first boundary string, it assigns this
573 text to the message's *preamble* attribute. When the
574 :class:`~email.generator.Generator` is writing out the plain text
575 representation of a MIME message, and it finds the
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000576 message has a *preamble* attribute, it will write this text in the area
577 between the headers and the first boundary. See :mod:`email.parser` and
578 :mod:`email.generator` for details.
579
580 Note that if the message object has no preamble, the *preamble* attribute
581 will be ``None``.
582
583
584 .. attribute:: epilogue
585
586 The *epilogue* attribute acts the same way as the *preamble* attribute,
587 except that it contains text that appears between the last boundary and
588 the end of the message.
589
590 .. versionchanged:: 2.5
591 You do not need to set the epilogue to the empty string in order for the
Serhiy Storchakaf65d4542013-08-19 10:03:25 +0300592 :class:`~email.generator.Generator` to print a newline at the end of the
593 file.
Benjamin Petersonc7b05922008-04-25 01:29:10 +0000594
595
596 .. attribute:: defects
597
598 The *defects* attribute contains a list of all the problems found when
599 parsing this message. See :mod:`email.errors` for a detailed description
600 of the possible parsing defects.
601
602 .. versionadded:: 2.4
Georg Brandl8ec7f652007-08-15 14:28:01 +0000603