1:mod:`email.message`: 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 39 .. method:: as_string([unixfrom]) 40 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``. 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). 47 48 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 51 :class:`~email.generator.Generator` instance and use its 52 :meth:`~email.generator.Generator.flatten` method directly. For example:: 53 54 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() 60 61 62 .. method:: __str__() 63 64 Equivalent to ``as_string(unixfrom=True)``. 65 66 67 .. method:: is_multipart() 68 69 Return ``True`` if the message's payload is a list of sub-\ 70 :class:`Message` objects, otherwise return ``False``. When 71 :meth:`is_multipart` returns ``False``, the payload should be a string object. 72 73 74 .. method:: set_unixfrom(unixfrom) 75 76 Set the message's envelope header to *unixfrom*, which should be a string. 77 78 79 .. method:: get_unixfrom() 80 81 Return the message's envelope header. Defaults to ``None`` if the 82 envelope header was never set. 83 84 85 .. method:: attach(payload) 86 87 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. 92 93 94 .. method:: get_payload([i[, decode]]) 95 96 Return the current payload, which will be a list of 97 :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. 100 101 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. 107 108 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``. 117 118 119 .. method:: set_payload(payload[, charset]) 120 121 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. 124 125 .. versionchanged:: 2.2.2 126 *charset* argument added. 127 128 129 .. method:: set_charset(charset) 130 131 Set the character set of the payload to *charset*, which can either be a 132 :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 136 :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. 152 153 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 157 representation of the message. MIME headers (:mailheader:`MIME-Version`, 158 :mailheader:`Content-Type`, :mailheader:`Content-Transfer-Encoding`) will 159 be added as needed. 160 161 .. versionadded:: 2.2.2 162 163 164 .. method:: get_charset() 165 166 Return the :class:`~email.charset.Charset` instance associated with the 167 message's payload. 168 169 .. versionadded:: 2.2.2 170 171 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. 180 181 These semantic differences are intentional and are biased toward maximal 182 convenience. 183 184 Note that in all cases, any envelope header present in the message is not 185 included in the mapping interface. 186 187 188 .. method:: __len__() 189 190 Return the total number of headers, including duplicates. 191 192 193 .. method:: __contains__(name) 194 195 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.:: 198 199 if 'message-id' in myMessage: 200 print 'Message-ID:', myMessage['message-id'] 201 202 203 .. method:: __getitem__(name) 204 205 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. 208 209 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. 213 214 215 .. method:: __setitem__(name, val) 216 217 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. 219 220 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.:: 223 224 del msg['subject'] 225 msg['subject'] = 'Python roolz!' 226 227 228 .. method:: __delitem__(name) 229 230 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. 232 233 234 .. method:: has_key(name) 235 236 Return true if the message contains a header field named *name*, otherwise 237 return false. 238 239 240 .. method:: keys() 241 242 Return a list of all the message's header field names. 243 244 245 .. method:: values() 246 247 Return a list of all the message's field values. 248 249 250 .. method:: items() 251 252 Return a list of 2-tuples containing all the message's field headers and 253 values. 254 255 256 .. method:: get(name[, failobj]) 257 258 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``). 261 262 Here are some additional useful methods: 263 264 265 .. method:: get_all(name[, failobj]) 266 267 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``). 270 271 272 .. method:: add_header(_name, _value, **_params) 273 274 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. 278 279 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 283 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. 289 290 Here's an example:: 291 292 msg.add_header('Content-Disposition', 'attachment', filename='bud.gif') 293 294 This will add a header that looks like :: 295 296 Content-Disposition: attachment; filename="bud.gif" 297 298 An example with non-ASCII characters:: 299 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 307 308 .. method:: replace_header(_name, _value) 309 310 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. 313 314 .. versionadded:: 2.2.2 315 316 317 .. method:: get_content_type() 318 319 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. 325 326 :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`. 331 332 .. versionadded:: 2.2.2 333 334 335 .. method:: get_content_maintype() 336 337 Return the message's main content type. This is the :mimetype:`maintype` 338 part of the string returned by :meth:`get_content_type`. 339 340 .. versionadded:: 2.2.2 341 342 343 .. method:: get_content_subtype() 344 345 Return the message's sub-content type. This is the :mimetype:`subtype` 346 part of the string returned by :meth:`get_content_type`. 347 348 .. versionadded:: 2.2.2 349 350 351 .. method:: get_default_type() 352 353 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`. 357 358 .. versionadded:: 2.2.2 359 360 361 .. method:: set_default_type(ctype) 362 363 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. 367 368 .. versionadded:: 2.2.2 369 370 371 .. method:: get_params([failobj[, header[, unquote]]]) 372 373 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). 380 381 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`. 384 385 .. versionchanged:: 2.2.2 386 *unquote* argument added. 387 388 389 .. method:: get_param(param[, failobj[, header[, unquote]]]) 390 391 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``). 395 396 Optional *header* if given, specifies the message header to use instead of 397 :mailheader:`Content-Type`. 398 399 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``. 406 407 If your application doesn't care whether the parameter was encoded as in 408 :rfc:`2231`, you can collapse the parameter value by calling 409 :func:`email.utils.collapse_rfc2231_value`, passing in the return value 410 from :meth:`get_param`. This will return a suitably decoded Unicode 411 string when the value is a tuple, or the original string unquoted if it 412 isn't. For example:: 413 414 rawparam = msg.get_param('foo') 415 param = email.utils.collapse_rfc2231_value(rawparam) 416 417 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``. 420 421 .. versionchanged:: 2.2.2 422 *unquote* argument added, and 3-tuple return value possible. 423 424 425 .. method:: set_param(param, value[, header[, requote[, charset[, language]]]]) 426 427 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`. 432 433 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``). 436 437 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. 441 442 .. versionadded:: 2.2.2 443 444 445 .. method:: del_param(param[, header[, requote]]) 446 447 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`. 452 453 .. versionadded:: 2.2.2 454 455 456 .. method:: set_type(type[, header][, requote]) 457 458 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. 461 462 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). 466 467 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. 470 471 .. versionadded:: 2.2.2 472 473 474 .. method:: get_filename([failobj]) 475 476 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 479 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`. 483 484 485 .. method:: get_boundary([failobj]) 486 487 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 490 string will always be unquoted as per :func:`email.utils.unquote`. 491 492 493 .. method:: set_boundary(boundary) 494 495 Set the ``boundary`` parameter of the :mailheader:`Content-Type` header to 496 *boundary*. :meth:`set_boundary` will always quote *boundary* if 497 necessary. A :exc:`~email.errors.HeaderParseError` is raised if the 498 message object has no :mailheader:`Content-Type` header. 499 500 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. 506 507 508 .. method:: get_content_charset([failobj]) 509 510 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. 513 514 Note that this method differs from :meth:`get_charset` which returns the 515 :class:`~email.charset.Charset` instance for the default encoding of the message body. 516 517 .. versionadded:: 2.2.2 518 519 520 .. method:: get_charsets([failobj]) 521 522 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. 525 526 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*. 532 533 534 .. method:: walk() 535 536 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. 540 541 Here's an example that prints the MIME type of every part of a multipart 542 message structure:: 543 544 >>> 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 552 553 .. versionchanged:: 2.5 554 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. 559 560 561 .. attribute:: preamble 562 563 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. 569 570 The *preamble* attribute contains this leading extra-armor text for MIME 571 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 576 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 592 :class:`~email.generator.Generator` to print a newline at the end of the 593 file. 594 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 603 604