Description: Parser class API
Keywords: lib

### 12.2.2.1 Parser class API

class `Parser`( | [_class[, strict]])

  The constructor for the `Parser` class takes an optional argument _class. This must be a callable factory (such as a function or a class), and it is used whenever a sub-message object needs to be created. It defaults to `Message` (see `email.Message`). The factory will be called without arguments.

  The optional strict flag specifies whether strict or lax parsing should be performed. Normally, when things like MIME terminating boundaries are missing, or when messages contain other formatting problems, the `Parser` will raise a `MessageParseError`. However, when lax parsing is enabled, the `Parser` will attempt to work around such broken formatting to produce a usable message structure (this doesn't mean `MessageParseError`s are never raised; some ill-formatted messages just can't be parsed). The strict flag defaults to `False` since lax parsing usually provides the most convenient behavior.

  Changed in version 2.2.2: The strict flag was added.

The other public `Parser` methods are:

`parse`( | fp[, headersonly])

  Read all the data from the file-like object fp, parse the resulting text, and return the root message object. fp must support both the `readline()` and the `read()` methods on file-like objects.

  The text contained in fp must be formatted as a block of RFC 2822 style headers and header continuation lines, optionally preceded by a envelope header. The header block is terminated either by the end of the data or by a blank line. Following the header block is the body of the message (which may contain MIME-encoded subparts).

  Optional headersonly is as with the `parse()` method.

  Changed in version 2.2.2: The headersonly flag was added.

`parsestr`( | text[, headersonly])

  Similar to the `parse()` method, except it takes a string object instead of a file-like object. Calling this method on a string is exactly equivalent to wrapping text in a `StringIO` instance first and calling `parse()`.

  Optional headersonly is a flag specifying whether to stop parsing after reading the headers or not. The default is `False`, meaning it parses the entire contents of the file.

  Changed in version 2.2.2: The headersonly flag was added.

Since creating a message object structure from a string or a file object is such a common task, two functions are provided as a convenience. They are available in the top-level `email` package namespace.

`message_from_string`( | s[, _class[, strict]])

  Return a message object structure from a string. This is exactly equivalent to `Parser().parsestr(s)`. Optional _class and strict are interpreted as with the `Parser` class constructor.

  Changed in version 2.2.2: The strict flag was added.

`message_from_file`( | fp[, _class[, strict]])

  Return a message object structure tree from an open file object. This is exactly equivalent to `Parser().parse(fp)`. Optional _class and strict are interpreted as with the `Parser` class constructor.

  Changed in version 2.2.2: The strict flag was added.

Here's an example of how you might use this at an interactive Python prompt:

    >>> import email
    >>> msg = email.message_from_string(myString)