Barry Warsaw | 5e63463 | 2001-09-26 05:23:47 +0000 | [diff] [blame] | 1 | \declaremodule{standard}{email.Utils} |
| 2 | \modulesynopsis{Miscellaneous email package utilities.} |
Barry Warsaw | 5e63463 | 2001-09-26 05:23:47 +0000 | [diff] [blame] | 3 | |
| 4 | There are several useful utilities provided with the \module{email} |
| 5 | package. |
| 6 | |
| 7 | \begin{funcdesc}{quote}{str} |
| 8 | Return a new string with backslashes in \var{str} replaced by two |
| 9 | backslashes and double quotes replaced by backslash-double quote. |
| 10 | \end{funcdesc} |
| 11 | |
| 12 | \begin{funcdesc}{unquote}{str} |
| 13 | Return a new string which is an \emph{unquoted} version of \var{str}. |
| 14 | If \var{str} ends and begins with double quotes, they are stripped |
| 15 | off. Likewise if \var{str} ends and begins with angle brackets, they |
| 16 | are stripped off. |
| 17 | \end{funcdesc} |
| 18 | |
| 19 | \begin{funcdesc}{parseaddr}{address} |
| 20 | Parse address -- which should be the value of some address-containing |
Barry Warsaw | c5f8fe3 | 2001-09-26 22:21:52 +0000 | [diff] [blame] | 21 | field such as \mailheader{To} or \mailheader{Cc} -- into its constituent |
| 22 | \emph{realname} and \emph{email address} parts. Returns a tuple of that |
Barry Warsaw | 5e63463 | 2001-09-26 05:23:47 +0000 | [diff] [blame] | 23 | information, 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} |
| 28 | The inverse of \method{parseaddr()}, this takes a 2-tuple of the form |
| 29 | \code{(realname, email_address)} and returns the string value suitable |
Barry Warsaw | c5f8fe3 | 2001-09-26 22:21:52 +0000 | [diff] [blame] | 30 | for a \mailheader{To} or \mailheader{Cc} header. If the first element of |
Barry Warsaw | 5e63463 | 2001-09-26 05:23:47 +0000 | [diff] [blame] | 31 | \var{pair} is false, then the second element is returned unmodified. |
| 32 | \end{funcdesc} |
| 33 | |
| 34 | \begin{funcdesc}{getaddresses}{fieldvalues} |
| 35 | This method returns a list of 2-tuples of the form returned by |
| 36 | \code{parseaddr()}. \var{fieldvalues} is a sequence of header field |
| 37 | values as might be returned by \method{Message.getall()}. Here's a |
| 38 | simple example that gets all the recipients of a message: |
| 39 | |
| 40 | \begin{verbatim} |
| 41 | from email.Utils import getaddresses |
| 42 | |
| 43 | tos = msg.get_all('to') |
| 44 | ccs = msg.get_all('cc') |
| 45 | resent_tos = msg.get_all('resent-to') |
| 46 | resent_ccs = msg.get_all('resent-cc') |
| 47 | all_recipients = getaddresses(tos + ccs + resent_tos + resent_ccs) |
| 48 | \end{verbatim} |
| 49 | \end{funcdesc} |
| 50 | |
| 51 | \begin{funcdesc}{decode}{s} |
| 52 | This method decodes a string according to the rules in \rfc{2047}. It |
| 53 | returns the decoded string as a Python unicode string. |
| 54 | \end{funcdesc} |
| 55 | |
| 56 | \begin{funcdesc}{encode}{s\optional{, charset\optional{, encoding}}} |
| 57 | This method encodes a string according to the rules in \rfc{2047}. It |
| 58 | is not actually the inverse of \function{decode()} since it doesn't |
| 59 | handle multiple character sets or multiple string parts needing |
| 60 | encoding. In fact, the input string \var{s} must already be encoded |
| 61 | in the \var{charset} character set (Python can't reliably guess what |
| 62 | character set a string might be encoded in). The default |
| 63 | \var{charset} is \samp{iso-8859-1}. |
| 64 | |
Barry Warsaw | c5f8fe3 | 2001-09-26 22:21:52 +0000 | [diff] [blame] | 65 | \var{encoding} must be either the letter \character{q} for |
| 66 | Quoted-Printable or \character{b} for Base64 encoding. If |
| 67 | neither, a \exception{ValueError} is raised. Both the \var{charset} and |
Barry Warsaw | 5e63463 | 2001-09-26 05:23:47 +0000 | [diff] [blame] | 68 | the \var{encoding} strings are case-insensitive, and coerced to lower |
| 69 | case in the returned string. |
| 70 | \end{funcdesc} |
| 71 | |
| 72 | \begin{funcdesc}{parsedate}{date} |
| 73 | Attempts to parse a date according to the rules in \rfc{2822}. |
| 74 | however, 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 |
| 78 | the date, \function{parsedate()} returns a 9-tuple that can be passed |
| 79 | directly to \function{time.mktime()}; otherwise \code{None} will be |
| 80 | returned. Note that fields 6, 7, and 8 of the result tuple are not |
| 81 | usable. |
| 82 | \end{funcdesc} |
| 83 | |
| 84 | \begin{funcdesc}{parsedate_tz}{date} |
| 85 | Performs the same function as \function{parsedate()}, but returns |
| 86 | either \code{None} or a 10-tuple; the first 9 elements make up a tuple |
| 87 | that can be passed directly to \function{time.mktime()}, and the tenth |
| 88 | is the offset of the date's timezone from UTC (which is the official |
| 89 | term for Greenwich Mean Time)\footnote{Note that the sign of the timezone |
| 90 | offset is the opposite of the sign of the \code{time.timezone} |
| 91 | variable for the same timezone; the latter variable follows the |
| 92 | \POSIX{} standard while this module follows \rfc{2822}.}. If the input |
| 93 | string 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 |
| 95 | usable. |
| 96 | \end{funcdesc} |
| 97 | |
| 98 | \begin{funcdesc}{mktime_tz}{tuple} |
| 99 | Turn a 10-tuple as returned by \function{parsedate_tz()} into a UTC |
| 100 | timestamp. It the timezone item in the tuple is \code{None}, assume |
| 101 | local time. Minor deficiency: \function{mktime_tz()} interprets the |
| 102 | first 8 elements of \var{tuple} as a local time and then compensates |
| 103 | for the timezone difference. This may yield a slight error around |
| 104 | changes in daylight savings time, though not worth worring about for |
| 105 | common use. |
| 106 | \end{funcdesc} |
| 107 | |
| 108 | \begin{funcdesc}{formatdate}{\optional{timeval}} |
| 109 | Returns the time formatted as per Internet standards \rfc{2822} |
| 110 | and updated by \rfc{1123}. If \var{timeval} is provided, then it |
| 111 | should be a floating point time value as expected by |
| 112 | \method{time.gmtime()}, otherwise the current time is used. |
| 113 | \end{funcdesc} |