blob: 8ebee97c1a0fc4412cd753282c879bfb9d5855c1 [file] [log] [blame]
Barry Warsaw5e634632001-09-26 05:23:47 +00001\declaremodule{standard}{email.Utils}
2\modulesynopsis{Miscellaneous email package utilities.}
Barry Warsaw5e634632001-09-26 05:23:47 +00003
4There are several useful utilities provided with the \module{email}
5package.
6
7\begin{funcdesc}{quote}{str}
8Return a new string with backslashes in \var{str} replaced by two
9backslashes and double quotes replaced by backslash-double quote.
10\end{funcdesc}
11
12\begin{funcdesc}{unquote}{str}
13Return a new string which is an \emph{unquoted} version of \var{str}.
14If \var{str} ends and begins with double quotes, they are stripped
15off. Likewise if \var{str} ends and begins with angle brackets, they
16are stripped off.
17\end{funcdesc}
18
19\begin{funcdesc}{parseaddr}{address}
20Parse address -- which should be the value of some address-containing
Barry Warsawc5f8fe32001-09-26 22:21:52 +000021field such as \mailheader{To} or \mailheader{Cc} -- into its constituent
22\emph{realname} and \emph{email address} parts. Returns a tuple of that
Barry Warsaw5e634632001-09-26 05:23:47 +000023information, unless the parse fails, in which case a 2-tuple of
24\code{(None, None)} is returned.
25\end{funcdesc}
26
27\begin{funcdesc}{dump_address_pair}{pair}
28The inverse of \method{parseaddr()}, this takes a 2-tuple of the form
29\code{(realname, email_address)} and returns the string value suitable
Barry Warsawc5f8fe32001-09-26 22:21:52 +000030for a \mailheader{To} or \mailheader{Cc} header. If the first element of
Barry Warsaw5e634632001-09-26 05:23:47 +000031\var{pair} is false, then the second element is returned unmodified.
32\end{funcdesc}
33
34\begin{funcdesc}{getaddresses}{fieldvalues}
35This method returns a list of 2-tuples of the form returned by
36\code{parseaddr()}. \var{fieldvalues} is a sequence of header field
37values as might be returned by \method{Message.getall()}. Here's a
38simple example that gets all the recipients of a message:
39
40\begin{verbatim}
41from email.Utils import getaddresses
42
Barry Warsawd05e0512001-10-22 20:53:45 +000043tos = msg.get_all('to', [])
44ccs = msg.get_all('cc', [])
45resent_tos = msg.get_all('resent-to', [])
46resent_ccs = msg.get_all('resent-cc', [])
Barry Warsaw5e634632001-09-26 05:23:47 +000047all_recipients = getaddresses(tos + ccs + resent_tos + resent_ccs)
48\end{verbatim}
49\end{funcdesc}
50
51\begin{funcdesc}{decode}{s}
52This method decodes a string according to the rules in \rfc{2047}. It
53returns the decoded string as a Python unicode string.
54\end{funcdesc}
55
56\begin{funcdesc}{encode}{s\optional{, charset\optional{, encoding}}}
57This method encodes a string according to the rules in \rfc{2047}. It
58is not actually the inverse of \function{decode()} since it doesn't
59handle multiple character sets or multiple string parts needing
60encoding. In fact, the input string \var{s} must already be encoded
61in the \var{charset} character set (Python can't reliably guess what
62character set a string might be encoded in). The default
63\var{charset} is \samp{iso-8859-1}.
64
Barry Warsawc5f8fe32001-09-26 22:21:52 +000065\var{encoding} must be either the letter \character{q} for
66Quoted-Printable or \character{b} for Base64 encoding. If
67neither, a \exception{ValueError} is raised. Both the \var{charset} and
Barry Warsaw5e634632001-09-26 05:23:47 +000068the \var{encoding} strings are case-insensitive, and coerced to lower
69case in the returned string.
70\end{funcdesc}
71
72\begin{funcdesc}{parsedate}{date}
73Attempts to parse a date according to the rules in \rfc{2822}.
74however, some mailers don't follow that format as specified, so
75\function{parsedate()} tries to guess correctly in such cases.
76\var{date} is a string containing an \rfc{2822} date, such as
77\code{"Mon, 20 Nov 1995 19:12:08 -0500"}. If it succeeds in parsing
78the date, \function{parsedate()} returns a 9-tuple that can be passed
79directly to \function{time.mktime()}; otherwise \code{None} will be
80returned. Note that fields 6, 7, and 8 of the result tuple are not
81usable.
82\end{funcdesc}
83
84\begin{funcdesc}{parsedate_tz}{date}
85Performs the same function as \function{parsedate()}, but returns
86either \code{None} or a 10-tuple; the first 9 elements make up a tuple
87that can be passed directly to \function{time.mktime()}, and the tenth
88is the offset of the date's timezone from UTC (which is the official
89term for Greenwich Mean Time)\footnote{Note that the sign of the timezone
90offset is the opposite of the sign of the \code{time.timezone}
91variable for the same timezone; the latter variable follows the
92\POSIX{} standard while this module follows \rfc{2822}.}. If the input
93string has no timezone, the last element of the tuple returned is
94\code{None}. Note that fields 6, 7, and 8 of the result tuple are not
95usable.
96\end{funcdesc}
97
98\begin{funcdesc}{mktime_tz}{tuple}
99Turn a 10-tuple as returned by \function{parsedate_tz()} into a UTC
100timestamp. It the timezone item in the tuple is \code{None}, assume
101local time. Minor deficiency: \function{mktime_tz()} interprets the
102first 8 elements of \var{tuple} as a local time and then compensates
103for the timezone difference. This may yield a slight error around
Andrew M. Kuchling43dc1fc2001-11-05 01:55:03 +0000104changes in daylight savings time, though not worth worrying about for
Barry Warsaw5e634632001-09-26 05:23:47 +0000105common use.
106\end{funcdesc}
107
Barry Warsaw3b0c82a2001-11-09 17:08:13 +0000108\begin{funcdesc}{formatdate}{\optional{timeval\optional{, localtime}}}
109Returns a date string as per Internet standard \rfc{2822}, e.g.:
110
111\begin{verbatim}
112Fri, 09 Nov 2001 01:08:47 -0000
113\end{verbatim}
114
115Optional \var{timeval} if given is a floating point time value as
116accepted by \function{time.gmtime()} and \function{time.localtime()},
117otherwise the current time is used.
118
119Optional \var{localtime} is a flag that when true, interprets
120\var{timeval}, and returns a date relative to the local timezone
121instead of UTC, properly taking daylight savings time into account.
Barry Warsaw5e634632001-09-26 05:23:47 +0000122\end{funcdesc}