blob: 8ba426a296b61282461b4ecfabd187f09612668e [file] [log] [blame]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001:mod:`email`: Generating MIME documents
2---------------------------------------
3
4.. module:: email.generator
5 :synopsis: Generate flat text email messages from a message structure.
6
7
8One of the most common tasks is to generate the flat text of the email message
9represented by a message object structure. You will need to do this if you want
10to send your message via the :mod:`smtplib` module or the :mod:`nntplib` module,
11or print the message on the console. Taking a message object structure and
12producing a flat text document is the job of the :class:`Generator` class.
13
14Again, as with the :mod:`email.parser` module, you aren't limited to the
15functionality of the bundled generator; you could write one from scratch
16yourself. However the bundled generator knows how to generate most email in a
17standards-compliant way, should handle MIME and non-MIME email messages just
18fine, and is designed so that the transformation from flat text, to a message
Georg Brandlb48327a2009-04-13 13:13:25 +000019structure via the :class:`~email.parser.Parser` class, and back to flat text,
20is idempotent (the input is identical to the output).
Georg Brandl8ec7f652007-08-15 14:28:01 +000021
22Here are the public methods of the :class:`Generator` class, imported from the
23:mod:`email.generator` module:
24
25
26.. class:: Generator(outfp[, mangle_from_[, maxheaderlen]])
27
28 The constructor for the :class:`Generator` class takes a file-like object called
29 *outfp* for an argument. *outfp* must support the :meth:`write` method and be
30 usable as the output file in a Python extended print statement.
31
32 Optional *mangle_from_* is a flag that, when ``True``, puts a ``>`` character in
33 front of any line in the body that starts exactly as ``From``, i.e. ``From``
34 followed by a space at the beginning of the line. This is the only guaranteed
35 portable way to avoid having such lines be mistaken for a Unix mailbox format
36 envelope header separator (see `WHY THE CONTENT-LENGTH FORMAT IS BAD
37 <http://www.jwz.org/doc/content-length.html>`_ for details). *mangle_from_*
38 defaults to ``True``, but you might want to set this to ``False`` if you are not
39 writing Unix mailbox format files.
40
41 Optional *maxheaderlen* specifies the longest length for a non-continued header.
42 When a header line is longer than *maxheaderlen* (in characters, with tabs
43 expanded to 8 spaces), the header will be split as defined in the
Georg Brandlb48327a2009-04-13 13:13:25 +000044 :class:`~email.header.Header` class. Set to zero to disable header wrapping.
45 The default is 78, as recommended (but not required) by :rfc:`2822`.
Georg Brandl8ec7f652007-08-15 14:28:01 +000046
Benjamin Petersonc7b05922008-04-25 01:29:10 +000047 The other public :class:`Generator` methods are:
Georg Brandl8ec7f652007-08-15 14:28:01 +000048
49
Benjamin Petersonc7b05922008-04-25 01:29:10 +000050 .. method:: flatten(msg[, unixfrom])
Georg Brandl8ec7f652007-08-15 14:28:01 +000051
Benjamin Petersonc7b05922008-04-25 01:29:10 +000052 Print the textual representation of the message object structure rooted at
53 *msg* to the output file specified when the :class:`Generator` instance
54 was created. Subparts are visited depth-first and the resulting text will
55 be properly MIME encoded.
Georg Brandl8ec7f652007-08-15 14:28:01 +000056
Benjamin Petersonc7b05922008-04-25 01:29:10 +000057 Optional *unixfrom* is a flag that forces the printing of the envelope
58 header delimiter before the first :rfc:`2822` header of the root message
59 object. If the root object has no envelope header, a standard one is
60 crafted. By default, this is set to ``False`` to inhibit the printing of
61 the envelope delimiter.
Georg Brandl8ec7f652007-08-15 14:28:01 +000062
Benjamin Petersonc7b05922008-04-25 01:29:10 +000063 Note that for subparts, no envelope header is ever printed.
Georg Brandl8ec7f652007-08-15 14:28:01 +000064
Benjamin Petersonc7b05922008-04-25 01:29:10 +000065 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +000066
67
Benjamin Petersonc7b05922008-04-25 01:29:10 +000068 .. method:: clone(fp)
Georg Brandl8ec7f652007-08-15 14:28:01 +000069
Benjamin Petersonc7b05922008-04-25 01:29:10 +000070 Return an independent clone of this :class:`Generator` instance with the
71 exact same options.
Georg Brandl8ec7f652007-08-15 14:28:01 +000072
Benjamin Petersonc7b05922008-04-25 01:29:10 +000073 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +000074
75
Benjamin Petersonc7b05922008-04-25 01:29:10 +000076 .. method:: write(s)
Georg Brandl8ec7f652007-08-15 14:28:01 +000077
Benjamin Petersonc7b05922008-04-25 01:29:10 +000078 Write the string *s* to the underlying file object, i.e. *outfp* passed to
79 :class:`Generator`'s constructor. This provides just enough file-like API
80 for :class:`Generator` instances to be used in extended print statements.
Georg Brandl8ec7f652007-08-15 14:28:01 +000081
82As a convenience, see the methods :meth:`Message.as_string` and
83``str(aMessage)``, a.k.a. :meth:`Message.__str__`, which simplify the generation
84of a formatted string representation of a message object. For more detail, see
85:mod:`email.message`.
86
87The :mod:`email.generator` module also provides a derived class, called
88:class:`DecodedGenerator` which is like the :class:`Generator` base class,
89except that non-\ :mimetype:`text` parts are substituted with a format string
90representing the part.
91
92
93.. class:: DecodedGenerator(outfp[, mangle_from_[, maxheaderlen[, fmt]]])
94
95 This class, derived from :class:`Generator` walks through all the subparts of a
96 message. If the subpart is of main type :mimetype:`text`, then it prints the
97 decoded payload of the subpart. Optional *_mangle_from_* and *maxheaderlen* are
98 as with the :class:`Generator` base class.
99
100 If the subpart is not of main type :mimetype:`text`, optional *fmt* is a format
101 string that is used instead of the message payload. *fmt* is expanded with the
102 following keywords, ``%(keyword)s`` format:
103
104 * ``type`` -- Full MIME type of the non-\ :mimetype:`text` part
105
106 * ``maintype`` -- Main MIME type of the non-\ :mimetype:`text` part
107
108 * ``subtype`` -- Sub-MIME type of the non-\ :mimetype:`text` part
109
110 * ``filename`` -- Filename of the non-\ :mimetype:`text` part
111
112 * ``description`` -- Description associated with the non-\ :mimetype:`text` part
113
114 * ``encoding`` -- Content transfer encoding of the non-\ :mimetype:`text` part
115
116 The default value for *fmt* is ``None``, meaning ::
117
118 [Non-text (%(type)s) part of message omitted, filename %(filename)s]
119
120 .. versionadded:: 2.2.2
121
122.. versionchanged:: 2.5
123 The previously deprecated method :meth:`__call__` was removed.
124