blob: 2795644b7980027c52d20a8554b9253060989b6a [file] [log] [blame]
Barry Warsaw5b9da892002-10-01 01:05:52 +00001\declaremodule{standard}{email.Header}
2\modulesynopsis{Representing non-ASCII headers}
3
4\rfc{2822} is the base standard that describes the format of email
5messages. It derives from the older \rfc{822} standard which came
Barry Warsaw5db478f2002-10-01 04:33:16 +00006into widespread use at a time when most email was composed of \ASCII{}
Barry Warsaw5b9da892002-10-01 01:05:52 +00007characters only. \rfc{2822} is a specification written assuming email
8contains only 7-bit \ASCII{} characters.
9
10Of course, as email has been deployed worldwide, it has become
11internationalized, such that language specific character sets can now
12be used in email messages. The base standard still requires email
Raymond Hettinger68804312005-01-01 00:28:46 +000013messages to be transferred using only 7-bit \ASCII{} characters, so a
Barry Warsaw5b9da892002-10-01 01:05:52 +000014slew of RFCs have been written describing how to encode email
15containing non-\ASCII{} characters into \rfc{2822}-compliant format.
16These RFCs include \rfc{2045}, \rfc{2046}, \rfc{2047}, and \rfc{2231}.
17The \module{email} package supports these standards in its
18\module{email.Header} and \module{email.Charset} modules.
19
20If you want to include non-\ASCII{} characters in your email headers,
21say in the \mailheader{Subject} or \mailheader{To} fields, you should
Barry Warsaw5db478f2002-10-01 04:33:16 +000022use the \class{Header} class and assign the field in the
23\class{Message} object to an instance of \class{Header} instead of
24using a string for the header value. For example:
Barry Warsaw5b9da892002-10-01 01:05:52 +000025
26\begin{verbatim}
27>>> from email.Message import Message
28>>> from email.Header import Header
29>>> msg = Message()
30>>> h = Header('p\xf6stal', 'iso-8859-1')
31>>> msg['Subject'] = h
32>>> print msg.as_string()
33Subject: =?iso-8859-1?q?p=F6stal?=
34
35
36\end{verbatim}
37
38Notice here how we wanted the \mailheader{Subject} field to contain a
39non-\ASCII{} character? We did this by creating a \class{Header}
40instance and passing in the character set that the byte string was
41encoded in. When the subsequent \class{Message} instance was
42flattened, the \mailheader{Subject} field was properly \rfc{2047}
43encoded. MIME-aware mail readers would show this header using the
44embedded ISO-8859-1 character.
45
46\versionadded{2.2.2}
47
48Here is the \class{Header} class description:
49
50\begin{classdesc}{Header}{\optional{s\optional{, charset\optional{,
Barry Warsawd1adc8a2002-12-30 19:17:37 +000051 maxlinelen\optional{, header_name\optional{, continuation_ws\optional{,
52 errors}}}}}}}
Barry Warsaw5db478f2002-10-01 04:33:16 +000053Create a MIME-compliant header that can contain strings in different
54character sets.
Barry Warsaw5b9da892002-10-01 01:05:52 +000055
56Optional \var{s} is the initial header value. If \code{None} (the
57default), the initial header value is not set. You can later append
58to the header with \method{append()} method calls. \var{s} may be a
59byte string or a Unicode string, but see the \method{append()}
60documentation for semantics.
61
62Optional \var{charset} serves two purposes: it has the same meaning as
63the \var{charset} argument to the \method{append()} method. It also
64sets the default character set for all subsequent \method{append()}
65calls that omit the \var{charset} argument. If \var{charset} is not
66provided in the constructor (the default), the \code{us-ascii}
67character set is used both as \var{s}'s initial charset and as the
68default for subsequent \method{append()} calls.
69
70The maximum line length can be specified explicit via
71\var{maxlinelen}. For splitting the first line to a shorter value (to
72account for the field header which isn't included in \var{s},
73e.g. \mailheader{Subject}) pass in the name of the field in
74\var{header_name}. The default \var{maxlinelen} is 76, and the
75default value for \var{header_name} is \code{None}, meaning it is not
76taken into account for the first line of a long, split header.
77
Barry Warsaw5db478f2002-10-01 04:33:16 +000078Optional \var{continuation_ws} must be \rfc{2822}-compliant folding
Barry Warsaw5b9da892002-10-01 01:05:52 +000079whitespace, and is usually either a space or a hard tab character.
80This character will be prepended to continuation lines.
81\end{classdesc}
82
Barry Warsawd1adc8a2002-12-30 19:17:37 +000083Optional \var{errors} is passed straight through to the
84\method{append()} method.
85
86\begin{methoddesc}[Header]{append}{s\optional{, charset\optional{, errors}}}
Barry Warsaw5b9da892002-10-01 01:05:52 +000087Append the string \var{s} to the MIME header.
88
89Optional \var{charset}, if given, should be a \class{Charset} instance
90(see \refmodule{email.Charset}) or the name of a character set, which
91will be converted to a \class{Charset} instance. A value of
92\code{None} (the default) means that the \var{charset} given in the
93constructor is used.
94
95\var{s} may be a byte string or a Unicode string. If it is a byte
Barry Warsaw5db478f2002-10-01 04:33:16 +000096string (i.e. \code{isinstance(s, str)} is true), then
Barry Warsaw5b9da892002-10-01 01:05:52 +000097\var{charset} is the encoding of that byte string, and a
98\exception{UnicodeError} will be raised if the string cannot be
99decoded with that character set.
100
101If \var{s} is a Unicode string, then \var{charset} is a hint
102specifying the character set of the characters in the string. In this
103case, when producing an \rfc{2822}-compliant header using \rfc{2047}
104rules, the Unicode string will be encoded using the following charsets
105in order: \code{us-ascii}, the \var{charset} hint, \code{utf-8}. The
106first character set to not provoke a \exception{UnicodeError} is used.
Barry Warsawd1adc8a2002-12-30 19:17:37 +0000107
108Optional \var{errors} is passed through to any \function{unicode()} or
109\function{ustr.encode()} call, and defaults to ``strict''.
Barry Warsaw5b9da892002-10-01 01:05:52 +0000110\end{methoddesc}
111
Barry Warsawf32e3132003-03-06 06:06:54 +0000112\begin{methoddesc}[Header]{encode}{\optional{splitchars}}
Barry Warsaw5b9da892002-10-01 01:05:52 +0000113Encode a message header into an RFC-compliant format, possibly
114wrapping long lines and encapsulating non-\ASCII{} parts in base64 or
Barry Warsawf32e3132003-03-06 06:06:54 +0000115quoted-printable encodings. Optional \var{splitchars} is a string
116containing characters to split long ASCII lines on, in rough support
117of \rfc{2822}'s \emph{highest level syntactic breaks}. This doesn't
118affect \rfc{2047} encoded lines.
Barry Warsaw5b9da892002-10-01 01:05:52 +0000119\end{methoddesc}
120
121The \class{Header} class also provides a number of methods to support
122standard operators and built-in functions.
123
124\begin{methoddesc}[Header]{__str__}{}
125A synonym for \method{Header.encode()}. Useful for
Barry Warsaw5db478f2002-10-01 04:33:16 +0000126\code{str(aHeader)}.
Barry Warsaw5b9da892002-10-01 01:05:52 +0000127\end{methoddesc}
128
129\begin{methoddesc}[Header]{__unicode__}{}
130A helper for the built-in \function{unicode()} function. Returns the
131header as a Unicode string.
132\end{methoddesc}
133
134\begin{methoddesc}[Header]{__eq__}{other}
135This method allows you to compare two \class{Header} instances for equality.
136\end{methoddesc}
137
138\begin{methoddesc}[Header]{__ne__}{other}
139This method allows you to compare two \class{Header} instances for inequality.
140\end{methoddesc}
141
142The \module{email.Header} module also provides the following
143convenient functions.
144
145\begin{funcdesc}{decode_header}{header}
146Decode a message header value without converting the character set.
147The header value is in \var{header}.
148
149This function returns a list of \code{(decoded_string, charset)} pairs
150containing each of the decoded parts of the header. \var{charset} is
151\code{None} for non-encoded parts of the header, otherwise a lower
152case string containing the name of the character set specified in the
153encoded string.
154
155Here's an example:
156
157\begin{verbatim}
158>>> from email.Header import decode_header
159>>> decode_header('=?iso-8859-1?q?p=F6stal?=')
Edward Loper3077b022004-09-28 02:54:54 +0000160[('p\xf6stal', 'iso-8859-1')]
Barry Warsaw5b9da892002-10-01 01:05:52 +0000161\end{verbatim}
162\end{funcdesc}
163
164\begin{funcdesc}{make_header}{decoded_seq\optional{, maxlinelen\optional{,
165 header_name\optional{, continuation_ws}}}}
166Create a \class{Header} instance from a sequence of pairs as returned
167by \function{decode_header()}.
168
169\function{decode_header()} takes a header value string and returns a
170sequence of pairs of the format \code{(decoded_string, charset)} where
171\var{charset} is the name of the character set.
172
173This function takes one of those sequence of pairs and returns a
174\class{Header} instance. Optional \var{maxlinelen},
175\var{header_name}, and \var{continuation_ws} are as in the
176\class{Header} constructor.
177\end{funcdesc}