blob: a7493bee4454ee72be767c9c56bb4f0038b560be [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,
R David Murrayaf707232012-05-15 22:12:09 -040020is idempotent (the input is identical to the output) [#]_. On the other hand,
21using
R. David Murray0e207df2010-01-10 17:41:28 +000022the Generator on a :class:`~email.message.Message` constructed by program may
23result in changes to the :class:`~email.message.Message` object as defaults are
24filled in.
Georg Brandl8ec7f652007-08-15 14:28:01 +000025
26Here are the public methods of the :class:`Generator` class, imported from the
27:mod:`email.generator` module:
28
29
30.. class:: Generator(outfp[, mangle_from_[, maxheaderlen]])
31
32 The constructor for the :class:`Generator` class takes a file-like object called
33 *outfp* for an argument. *outfp* must support the :meth:`write` method and be
34 usable as the output file in a Python extended print statement.
35
36 Optional *mangle_from_* is a flag that, when ``True``, puts a ``>`` character in
37 front of any line in the body that starts exactly as ``From``, i.e. ``From``
38 followed by a space at the beginning of the line. This is the only guaranteed
39 portable way to avoid having such lines be mistaken for a Unix mailbox format
40 envelope header separator (see `WHY THE CONTENT-LENGTH FORMAT IS BAD
41 <http://www.jwz.org/doc/content-length.html>`_ for details). *mangle_from_*
42 defaults to ``True``, but you might want to set this to ``False`` if you are not
43 writing Unix mailbox format files.
44
45 Optional *maxheaderlen* specifies the longest length for a non-continued header.
46 When a header line is longer than *maxheaderlen* (in characters, with tabs
47 expanded to 8 spaces), the header will be split as defined in the
Georg Brandlb48327a2009-04-13 13:13:25 +000048 :class:`~email.header.Header` class. Set to zero to disable header wrapping.
49 The default is 78, as recommended (but not required) by :rfc:`2822`.
Georg Brandl8ec7f652007-08-15 14:28:01 +000050
Benjamin Petersonc7b05922008-04-25 01:29:10 +000051 The other public :class:`Generator` methods are:
Georg Brandl8ec7f652007-08-15 14:28:01 +000052
53
Benjamin Petersonc7b05922008-04-25 01:29:10 +000054 .. method:: flatten(msg[, unixfrom])
Georg Brandl8ec7f652007-08-15 14:28:01 +000055
Benjamin Petersonc7b05922008-04-25 01:29:10 +000056 Print the textual representation of the message object structure rooted at
57 *msg* to the output file specified when the :class:`Generator` instance
58 was created. Subparts are visited depth-first and the resulting text will
59 be properly MIME encoded.
Georg Brandl8ec7f652007-08-15 14:28:01 +000060
Benjamin Petersonc7b05922008-04-25 01:29:10 +000061 Optional *unixfrom* is a flag that forces the printing of the envelope
62 header delimiter before the first :rfc:`2822` header of the root message
63 object. If the root object has no envelope header, a standard one is
64 crafted. By default, this is set to ``False`` to inhibit the printing of
65 the envelope delimiter.
Georg Brandl8ec7f652007-08-15 14:28:01 +000066
Benjamin Petersonc7b05922008-04-25 01:29:10 +000067 Note that for subparts, no envelope header is ever printed.
Georg Brandl8ec7f652007-08-15 14:28:01 +000068
Benjamin Petersonc7b05922008-04-25 01:29:10 +000069 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +000070
71
Benjamin Petersonc7b05922008-04-25 01:29:10 +000072 .. method:: clone(fp)
Georg Brandl8ec7f652007-08-15 14:28:01 +000073
Benjamin Petersonc7b05922008-04-25 01:29:10 +000074 Return an independent clone of this :class:`Generator` instance with the
75 exact same options.
Georg Brandl8ec7f652007-08-15 14:28:01 +000076
Benjamin Petersonc7b05922008-04-25 01:29:10 +000077 .. versionadded:: 2.2.2
Georg Brandl8ec7f652007-08-15 14:28:01 +000078
79
Benjamin Petersonc7b05922008-04-25 01:29:10 +000080 .. method:: write(s)
Georg Brandl8ec7f652007-08-15 14:28:01 +000081
Benjamin Petersonc7b05922008-04-25 01:29:10 +000082 Write the string *s* to the underlying file object, i.e. *outfp* passed to
83 :class:`Generator`'s constructor. This provides just enough file-like API
84 for :class:`Generator` instances to be used in extended print statements.
Georg Brandl8ec7f652007-08-15 14:28:01 +000085
86As a convenience, see the methods :meth:`Message.as_string` and
87``str(aMessage)``, a.k.a. :meth:`Message.__str__`, which simplify the generation
88of a formatted string representation of a message object. For more detail, see
89:mod:`email.message`.
90
91The :mod:`email.generator` module also provides a derived class, called
92:class:`DecodedGenerator` which is like the :class:`Generator` base class,
93except that non-\ :mimetype:`text` parts are substituted with a format string
94representing the part.
95
96
97.. class:: DecodedGenerator(outfp[, mangle_from_[, maxheaderlen[, fmt]]])
98
99 This class, derived from :class:`Generator` walks through all the subparts of a
100 message. If the subpart is of main type :mimetype:`text`, then it prints the
101 decoded payload of the subpart. Optional *_mangle_from_* and *maxheaderlen* are
102 as with the :class:`Generator` base class.
103
104 If the subpart is not of main type :mimetype:`text`, optional *fmt* is a format
105 string that is used instead of the message payload. *fmt* is expanded with the
106 following keywords, ``%(keyword)s`` format:
107
108 * ``type`` -- Full MIME type of the non-\ :mimetype:`text` part
109
110 * ``maintype`` -- Main MIME type of the non-\ :mimetype:`text` part
111
112 * ``subtype`` -- Sub-MIME type of the non-\ :mimetype:`text` part
113
114 * ``filename`` -- Filename of the non-\ :mimetype:`text` part
115
116 * ``description`` -- Description associated with the non-\ :mimetype:`text` part
117
118 * ``encoding`` -- Content transfer encoding of the non-\ :mimetype:`text` part
119
120 The default value for *fmt* is ``None``, meaning ::
121
122 [Non-text (%(type)s) part of message omitted, filename %(filename)s]
123
124 .. versionadded:: 2.2.2
125
126.. versionchanged:: 2.5
127 The previously deprecated method :meth:`__call__` was removed.
128
R David Murrayaf707232012-05-15 22:12:09 -0400129
130.. rubric:: Footnotes
131
132.. [#] This statement assumes that you use the appropriate setting for the
133 ``unixfrom`` argument, and that you set maxheaderlen=0 (which will
134 preserve whatever the input line lengths were). It is also not strictly
135 true, since in many cases runs of whitespace in headers are collapsed
136 into single blanks. The latter is a bug that will eventually be fixed.