Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 1 | :mod:`email`: Representing an email message |
| 2 | ------------------------------------------- |
| 3 | |
| 4 | .. module:: email.message |
| 5 | :synopsis: The base class representing email messages. |
| 6 | |
| 7 | |
| 8 | The central class in the :mod:`email` package is the :class:`Message` class, |
| 9 | imported 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 |
| 11 | setting and querying header fields, and for accessing message bodies. |
| 12 | |
| 13 | Conceptually, a :class:`Message` object consists of *headers* and *payloads*. |
| 14 | Headers are :rfc:`2822` style field names and values where the field name and |
| 15 | value are separated by a colon. The colon is not part of either the field name |
| 16 | or the field value. |
| 17 | |
| 18 | Headers are stored and returned in case-preserving form but are matched |
| 19 | case-insensitively. There may also be a single envelope header, also known as |
| 20 | the *Unix-From* header or the ``From_`` header. The payload is either a string |
| 21 | in the case of simple message objects or a list of :class:`Message` objects for |
| 22 | MIME container documents (e.g. :mimetype:`multipart/\*` and |
| 23 | :mimetype:`message/rfc822`). |
| 24 | |
| 25 | :class:`Message` objects provide a mapping style interface for accessing the |
| 26 | message headers, and an explicit interface for accessing both the headers and |
| 27 | the payload. It provides convenience methods for generating a flat text |
| 28 | representation of the message object tree, for accessing commonly used header |
| 29 | parameters, and for recursively walking over the object tree. |
| 30 | |
| 31 | Here are the methods of the :class:`Message` class: |
| 32 | |
| 33 | |
| 34 | .. class:: Message() |
| 35 | |
| 36 | The constructor takes no arguments. |
| 37 | |
| 38 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 39 | .. method:: as_string([unixfrom]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 40 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 41 | 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 Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 44 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 45 | 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 |
| 48 | :class:`Generator` instance and use its :meth:`flatten` method directly. |
| 49 | For example:: |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 50 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 51 | from cStringIO import StringIO |
| 52 | 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 Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 57 | |
| 58 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 59 | .. method:: __str__() |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 60 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 61 | Equivalent to ``as_string(unixfrom=True)``. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 62 | |
| 63 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 64 | .. method:: is_multipart() |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 65 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 66 | 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 Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 69 | |
| 70 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 71 | .. method:: set_unixfrom(unixfrom) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 72 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 73 | Set the message's envelope header to *unixfrom*, which should be a string. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 74 | |
| 75 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 76 | .. method:: get_unixfrom() |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 77 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 78 | Return the message's envelope header. Defaults to ``None`` if the |
| 79 | envelope header was never set. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 80 | |
| 81 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 82 | .. method:: attach(payload) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 83 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 84 | 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 Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 89 | |
| 90 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 91 | .. method:: get_payload([i[, decode]]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 92 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 93 | Return a reference the current payload, which will be a list of |
| 94 | :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 Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 97 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 98 | 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 Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 104 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 105 | 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 Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 114 | |
| 115 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 116 | .. method:: set_payload(payload[, charset]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 117 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 118 | 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 Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 121 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 122 | .. versionchanged:: 2.2.2 |
| 123 | *charset* argument added. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 124 | |
| 125 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 126 | .. method:: set_charset(charset) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 127 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 128 | Set the character set of the payload to *charset*, which can either be a |
| 129 | :class:`Charset` instance (see :mod:`email.charset`), a string naming a |
| 130 | character set, or ``None``. If it is a string, it will be converted to a |
| 131 | :class:`Charset` instance. If *charset* is ``None``, the ``charset`` |
| 132 | parameter will be removed from the :mailheader:`Content-Type` |
| 133 | header. Anything else will generate a :exc:`TypeError`. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 134 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 135 | 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 Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 141 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 142 | .. versionadded:: 2.2.2 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 143 | |
| 144 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 145 | .. method:: get_charset() |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 146 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 147 | Return the :class:`Charset` instance associated with the message's |
| 148 | payload. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 149 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 150 | .. versionadded:: 2.2.2 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 151 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 152 | The following methods implement a mapping-like interface for accessing the |
| 153 | message's :rfc:`2822` headers. Note that there are some semantic differences |
| 154 | between these methods and a normal mapping (i.e. dictionary) interface. For |
| 155 | example, in a dictionary there are no duplicate keys, but here there may be |
| 156 | duplicate message headers. Also, in dictionaries there is no guaranteed |
| 157 | order to the keys returned by :meth:`keys`, but in a :class:`Message` object, |
| 158 | headers are always returned in the order they appeared in the original |
| 159 | message, or were added to the message later. Any header deleted and then |
| 160 | re-added are always appended to the end of the header list. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 161 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 162 | These semantic differences are intentional and are biased toward maximal |
| 163 | convenience. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 164 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 165 | Note that in all cases, any envelope header present in the message is not |
| 166 | included in the mapping interface. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 167 | |
| 168 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 169 | .. method:: __len__() |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 170 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 171 | Return the total number of headers, including duplicates. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 172 | |
| 173 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 174 | .. method:: __contains__(name) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 175 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 176 | Return true if the message object has a field named *name*. Matching is |
| 177 | done case-insensitively and *name* should not include the trailing colon. |
| 178 | Used for the ``in`` operator, e.g.:: |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 179 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 180 | if 'message-id' in myMessage: |
| 181 | print 'Message-ID:', myMessage['message-id'] |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 182 | |
| 183 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 184 | .. method:: __getitem__(name) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 185 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 186 | Return the value of the named header field. *name* should not include the |
| 187 | colon field separator. If the header is missing, ``None`` is returned; a |
| 188 | :exc:`KeyError` is never raised. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 189 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 190 | Note that if the named field appears more than once in the message's |
| 191 | headers, exactly which of those field values will be returned is |
| 192 | undefined. Use the :meth:`get_all` method to get the values of all the |
| 193 | extant named headers. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 194 | |
| 195 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 196 | .. method:: __setitem__(name, val) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 197 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 198 | Add a header to the message with field name *name* and value *val*. The |
| 199 | field is appended to the end of the message's existing fields. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 200 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 201 | Note that this does *not* overwrite or delete any existing header with the same |
| 202 | name. If you want to ensure that the new header is the only one present in the |
| 203 | message with field name *name*, delete the field first, e.g.:: |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 204 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 205 | del msg['subject'] |
| 206 | msg['subject'] = 'Python roolz!' |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 207 | |
| 208 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 209 | .. method:: __delitem__(name) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 210 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 211 | Delete all occurrences of the field with name *name* from the message's |
| 212 | headers. No exception is raised if the named field isn't present in the headers. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 213 | |
| 214 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 215 | .. method:: has_key(name) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 216 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 217 | Return true if the message contains a header field named *name*, otherwise |
| 218 | return false. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 219 | |
| 220 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 221 | .. method:: keys() |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 222 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 223 | Return a list of all the message's header field names. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 224 | |
| 225 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 226 | .. method:: values() |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 227 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 228 | Return a list of all the message's field values. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 229 | |
| 230 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 231 | .. method:: items() |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 232 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 233 | Return a list of 2-tuples containing all the message's field headers and |
| 234 | values. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 235 | |
| 236 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 237 | .. method:: get(name[, failobj]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 238 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 239 | Return the value of the named header field. This is identical to |
| 240 | :meth:`__getitem__` except that optional *failobj* is returned if the |
| 241 | named header is missing (defaults to ``None``). |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 242 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 243 | Here are some additional useful methods: |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 244 | |
| 245 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 246 | .. method:: get_all(name[, failobj]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 247 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 248 | Return a list of all the values for the field named *name*. If there are |
| 249 | no such named headers in the message, *failobj* is returned (defaults to |
| 250 | ``None``). |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 251 | |
| 252 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 253 | .. method:: add_header(_name, _value, **_params) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 254 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 255 | Extended header setting. This method is similar to :meth:`__setitem__` |
| 256 | except that additional header parameters can be provided as keyword |
| 257 | arguments. *_name* is the header field to add and *_value* is the |
| 258 | *primary* value for the header. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 259 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 260 | For each item in the keyword argument dictionary *_params*, the key is |
| 261 | taken as the parameter name, with underscores converted to dashes (since |
| 262 | dashes are illegal in Python identifiers). Normally, the parameter will |
| 263 | be added as ``key="value"`` unless the value is ``None``, in which case |
| 264 | only the key will be added. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 265 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 266 | Here's an example:: |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 267 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 268 | msg.add_header('Content-Disposition', 'attachment', filename='bud.gif') |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 269 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 270 | This will add a header that looks like :: |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 271 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 272 | Content-Disposition: attachment; filename="bud.gif" |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 273 | |
| 274 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 275 | .. method:: replace_header(_name, _value) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 276 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 277 | Replace a header. Replace the first header found in the message that |
| 278 | matches *_name*, retaining header order and field name case. If no |
| 279 | matching header was found, a :exc:`KeyError` is raised. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 280 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 281 | .. versionadded:: 2.2.2 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 282 | |
| 283 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 284 | .. method:: get_content_type() |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 285 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 286 | Return the message's content type. The returned string is coerced to |
| 287 | lower case of the form :mimetype:`maintype/subtype`. If there was no |
| 288 | :mailheader:`Content-Type` header in the message the default type as given |
| 289 | by :meth:`get_default_type` will be returned. Since according to |
| 290 | :rfc:`2045`, messages always have a default type, :meth:`get_content_type` |
| 291 | will always return a value. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 292 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 293 | :rfc:`2045` defines a message's default type to be :mimetype:`text/plain` |
| 294 | unless it appears inside a :mimetype:`multipart/digest` container, in |
| 295 | which case it would be :mimetype:`message/rfc822`. If the |
| 296 | :mailheader:`Content-Type` header has an invalid type specification, |
| 297 | :rfc:`2045` mandates that the default type be :mimetype:`text/plain`. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 298 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 299 | .. versionadded:: 2.2.2 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 300 | |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 301 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 302 | .. method:: get_content_maintype() |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 303 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 304 | Return the message's main content type. This is the :mimetype:`maintype` |
| 305 | part of the string returned by :meth:`get_content_type`. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 306 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 307 | .. versionadded:: 2.2.2 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 308 | |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 309 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 310 | .. method:: get_content_subtype() |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 311 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 312 | Return the message's sub-content type. This is the :mimetype:`subtype` |
| 313 | part of the string returned by :meth:`get_content_type`. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 314 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 315 | .. versionadded:: 2.2.2 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 316 | |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 317 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 318 | .. method:: get_default_type() |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 319 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 320 | Return the default content type. Most messages have a default content |
| 321 | type of :mimetype:`text/plain`, except for messages that are subparts of |
| 322 | :mimetype:`multipart/digest` containers. Such subparts have a default |
| 323 | content type of :mimetype:`message/rfc822`. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 324 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 325 | .. versionadded:: 2.2.2 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 326 | |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 327 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 328 | .. method:: set_default_type(ctype) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 329 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 330 | Set the default content type. *ctype* should either be |
| 331 | :mimetype:`text/plain` or :mimetype:`message/rfc822`, although this is not |
| 332 | enforced. The default content type is not stored in the |
| 333 | :mailheader:`Content-Type` header. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 334 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 335 | .. versionadded:: 2.2.2 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 336 | |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 337 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 338 | .. method:: get_params([failobj[, header[, unquote]]]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 339 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 340 | Return the message's :mailheader:`Content-Type` parameters, as a list. |
| 341 | The elements of the returned list are 2-tuples of key/value pairs, as |
| 342 | split on the ``'='`` sign. The left hand side of the ``'='`` is the key, |
| 343 | while the right hand side is the value. If there is no ``'='`` sign in |
| 344 | the parameter the value is the empty string, otherwise the value is as |
| 345 | described in :meth:`get_param` and is unquoted if optional *unquote* is |
| 346 | ``True`` (the default). |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 347 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 348 | Optional *failobj* is the object to return if there is no |
| 349 | :mailheader:`Content-Type` header. Optional *header* is the header to |
| 350 | search instead of :mailheader:`Content-Type`. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 351 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 352 | .. versionchanged:: 2.2.2 |
| 353 | *unquote* argument added. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 354 | |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 355 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 356 | .. method:: get_param(param[, failobj[, header[, unquote]]]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 357 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 358 | Return the value of the :mailheader:`Content-Type` header's parameter |
| 359 | *param* as a string. If the message has no :mailheader:`Content-Type` |
| 360 | header or if there is no such parameter, then *failobj* is returned |
| 361 | (defaults to ``None``). |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 362 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 363 | Optional *header* if given, specifies the message header to use instead of |
| 364 | :mailheader:`Content-Type`. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 365 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 366 | Parameter keys are always compared case insensitively. The return value |
| 367 | can either be a string, or a 3-tuple if the parameter was :rfc:`2231` |
| 368 | encoded. When it's a 3-tuple, the elements of the value are of the form |
| 369 | ``(CHARSET, LANGUAGE, VALUE)``. Note that both ``CHARSET`` and |
| 370 | ``LANGUAGE`` can be ``None``, in which case you should consider ``VALUE`` |
| 371 | to be encoded in the ``us-ascii`` charset. You can usually ignore |
| 372 | ``LANGUAGE``. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 373 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 374 | If your application doesn't care whether the parameter was encoded as in |
| 375 | :rfc:`2231`, you can collapse the parameter value by calling |
| 376 | :func:`email.Utils.collapse_rfc2231_value`, passing in the return value |
| 377 | from :meth:`get_param`. This will return a suitably decoded Unicode |
| 378 | string whn the value is a tuple, or the original string unquoted if it |
| 379 | isn't. For example:: |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 380 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 381 | rawparam = msg.get_param('foo') |
| 382 | param = email.Utils.collapse_rfc2231_value(rawparam) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 383 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 384 | In any case, the parameter value (either the returned string, or the |
| 385 | ``VALUE`` item in the 3-tuple) is always unquoted, unless *unquote* is set |
| 386 | to ``False``. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 387 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 388 | .. versionchanged:: 2.2.2 |
| 389 | *unquote* argument added, and 3-tuple return value possible. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 390 | |
| 391 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 392 | .. method:: set_param(param, value[, header[, requote[, charset[, language]]]]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 393 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 394 | Set a parameter in the :mailheader:`Content-Type` header. If the |
| 395 | parameter already exists in the header, its value will be replaced with |
| 396 | *value*. If the :mailheader:`Content-Type` header as not yet been defined |
| 397 | for this message, it will be set to :mimetype:`text/plain` and the new |
| 398 | parameter value will be appended as per :rfc:`2045`. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 399 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 400 | Optional *header* specifies an alternative header to |
| 401 | :mailheader:`Content-Type`, and all parameters will be quoted as necessary |
| 402 | unless optional *requote* is ``False`` (the default is ``True``). |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 403 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 404 | If optional *charset* is specified, the parameter will be encoded |
| 405 | according to :rfc:`2231`. Optional *language* specifies the RFC 2231 |
| 406 | language, defaulting to the empty string. Both *charset* and *language* |
| 407 | should be strings. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 408 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 409 | .. versionadded:: 2.2.2 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 410 | |
| 411 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 412 | .. method:: del_param(param[, header[, requote]]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 413 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 414 | Remove the given parameter completely from the :mailheader:`Content-Type` |
| 415 | header. The header will be re-written in place without the parameter or |
| 416 | its value. All values will be quoted as necessary unless *requote* is |
| 417 | ``False`` (the default is ``True``). Optional *header* specifies an |
| 418 | alternative to :mailheader:`Content-Type`. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 419 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 420 | .. versionadded:: 2.2.2 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 421 | |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 422 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 423 | .. method:: set_type(type[, header][, requote]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 424 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 425 | Set the main type and subtype for the :mailheader:`Content-Type` |
| 426 | header. *type* must be a string in the form :mimetype:`maintype/subtype`, |
| 427 | otherwise a :exc:`ValueError` is raised. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 428 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 429 | This method replaces the :mailheader:`Content-Type` header, keeping all |
| 430 | the parameters in place. If *requote* is ``False``, this leaves the |
| 431 | existing header's quoting as is, otherwise the parameters will be quoted |
| 432 | (the default). |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 433 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 434 | An alternative header can be specified in the *header* argument. When the |
| 435 | :mailheader:`Content-Type` header is set a :mailheader:`MIME-Version` |
| 436 | header is also added. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 437 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 438 | .. versionadded:: 2.2.2 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 439 | |
| 440 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 441 | .. method:: get_filename([failobj]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 442 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 443 | Return the value of the ``filename`` parameter of the |
| 444 | :mailheader:`Content-Disposition` header of the message. If the header |
| 445 | does not have a ``filename`` parameter, this method falls back to looking |
| 446 | for the ``name`` parameter. If neither is found, or the header is |
| 447 | missing, then *failobj* is returned. The returned string will always be |
| 448 | unquoted as per :meth:`Utils.unquote`. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 449 | |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 450 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 451 | .. method:: get_boundary([failobj]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 452 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 453 | Return the value of the ``boundary`` parameter of the |
| 454 | :mailheader:`Content-Type` header of the message, or *failobj* if either |
| 455 | the header is missing, or has no ``boundary`` parameter. The returned |
| 456 | string will always be unquoted as per :meth:`Utils.unquote`. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 457 | |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 458 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 459 | .. method:: set_boundary(boundary) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 460 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 461 | Set the ``boundary`` parameter of the :mailheader:`Content-Type` header to |
| 462 | *boundary*. :meth:`set_boundary` will always quote *boundary* if |
| 463 | necessary. A :exc:`HeaderParseError` is raised if the message object has |
| 464 | no :mailheader:`Content-Type` header. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 465 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 466 | Note that using this method is subtly different than deleting the old |
| 467 | :mailheader:`Content-Type` header and adding a new one with the new |
| 468 | boundary via :meth:`add_header`, because :meth:`set_boundary` preserves |
| 469 | the order of the :mailheader:`Content-Type` header in the list of |
| 470 | headers. However, it does *not* preserve any continuation lines which may |
| 471 | have been present in the original :mailheader:`Content-Type` header. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 472 | |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 473 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 474 | .. method:: get_content_charset([failobj]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 475 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 476 | Return the ``charset`` parameter of the :mailheader:`Content-Type` header, |
| 477 | coerced to lower case. If there is no :mailheader:`Content-Type` header, or if |
| 478 | that header has no ``charset`` parameter, *failobj* is returned. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 479 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 480 | Note that this method differs from :meth:`get_charset` which returns the |
| 481 | :class:`Charset` instance for the default encoding of the message body. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 482 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 483 | .. versionadded:: 2.2.2 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 484 | |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 485 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 486 | .. method:: get_charsets([failobj]) |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 487 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 488 | Return a list containing the character set names in the message. If the |
| 489 | message is a :mimetype:`multipart`, then the list will contain one element |
| 490 | for each subpart in the payload, otherwise, it will be a list of length 1. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 491 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 492 | Each item in the list will be a string which is the value of the |
| 493 | ``charset`` parameter in the :mailheader:`Content-Type` header for the |
| 494 | represented subpart. However, if the subpart has no |
| 495 | :mailheader:`Content-Type` header, no ``charset`` parameter, or is not of |
| 496 | the :mimetype:`text` main MIME type, then that item in the returned list |
| 497 | will be *failobj*. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 498 | |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 499 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 500 | .. method:: walk() |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 501 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 502 | The :meth:`walk` method is an all-purpose generator which can be used to |
| 503 | iterate over all the parts and subparts of a message object tree, in |
| 504 | depth-first traversal order. You will typically use :meth:`walk` as the |
| 505 | iterator in a ``for`` loop; each iteration returns the next subpart. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 506 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 507 | Here's an example that prints the MIME type of every part of a multipart |
| 508 | message structure:: |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 509 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 510 | >>> for part in msg.walk(): |
| 511 | ... print part.get_content_type() |
| 512 | multipart/report |
| 513 | text/plain |
| 514 | message/delivery-status |
| 515 | text/plain |
| 516 | text/plain |
| 517 | message/rfc822 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 518 | |
| 519 | .. versionchanged:: 2.5 |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 520 | The previously deprecated methods :meth:`get_type`, :meth:`get_main_type`, and |
| 521 | :meth:`get_subtype` were removed. |
| 522 | |
| 523 | :class:`Message` objects can also optionally contain two instance attributes, |
| 524 | which can be used when generating the plain text of a MIME message. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 525 | |
| 526 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 527 | .. attribute:: preamble |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 528 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 529 | The format of a MIME document allows for some text between the blank line |
| 530 | following the headers, and the first multipart boundary string. Normally, |
| 531 | this text is never visible in a MIME-aware mail reader because it falls |
| 532 | outside the standard MIME armor. However, when viewing the raw text of |
| 533 | the message, or when viewing the message in a non-MIME aware reader, this |
| 534 | text can become visible. |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 535 | |
Benjamin Peterson | c7b0592 | 2008-04-25 01:29:10 +0000 | [diff] [blame^] | 536 | The *preamble* attribute contains this leading extra-armor text for MIME |
| 537 | documents. When the :class:`Parser` discovers some text after the headers |
| 538 | but before the first boundary string, it assigns this text to the |
| 539 | message's *preamble* attribute. When the :class:`Generator` is writing |
| 540 | out the plain text representation of a MIME message, and it finds the |
| 541 | message has a *preamble* attribute, it will write this text in the area |
| 542 | between the headers and the first boundary. See :mod:`email.parser` and |
| 543 | :mod:`email.generator` for details. |
| 544 | |
| 545 | Note that if the message object has no preamble, the *preamble* attribute |
| 546 | will be ``None``. |
| 547 | |
| 548 | |
| 549 | .. attribute:: epilogue |
| 550 | |
| 551 | The *epilogue* attribute acts the same way as the *preamble* attribute, |
| 552 | except that it contains text that appears between the last boundary and |
| 553 | the end of the message. |
| 554 | |
| 555 | .. versionchanged:: 2.5 |
| 556 | You do not need to set the epilogue to the empty string in order for the |
| 557 | :class:`Generator` to print a newline at the end of the file. |
| 558 | |
| 559 | |
| 560 | .. attribute:: defects |
| 561 | |
| 562 | The *defects* attribute contains a list of all the problems found when |
| 563 | parsing this message. See :mod:`email.errors` for a detailed description |
| 564 | of the possible parsing defects. |
| 565 | |
| 566 | .. versionadded:: 2.4 |
Georg Brandl | 8ec7f65 | 2007-08-15 14:28:01 +0000 | [diff] [blame] | 567 | |