| 1 | % Copyright (C) 2001-2006 Python Software Foundation
|
|---|
| 2 | % Author: [email protected] (Barry Warsaw)
|
|---|
| 3 |
|
|---|
| 4 | \section{\module{email} ---
|
|---|
| 5 | An email and MIME handling package}
|
|---|
| 6 |
|
|---|
| 7 | \declaremodule{standard}{email}
|
|---|
| 8 | \modulesynopsis{Package supporting the parsing, manipulating, and
|
|---|
| 9 | generating email messages, including MIME documents.}
|
|---|
| 10 | \moduleauthor{Barry A. Warsaw}{[email protected]}
|
|---|
| 11 | \sectionauthor{Barry A. Warsaw}{[email protected]}
|
|---|
| 12 |
|
|---|
| 13 | \versionadded{2.2}
|
|---|
| 14 |
|
|---|
| 15 | The \module{email} package is a library for managing email messages,
|
|---|
| 16 | including MIME and other \rfc{2822}-based message documents. It
|
|---|
| 17 | subsumes most of the functionality in several older standard modules
|
|---|
| 18 | such as \refmodule{rfc822}, \refmodule{mimetools},
|
|---|
| 19 | \refmodule{multifile}, and other non-standard packages such as
|
|---|
| 20 | \module{mimecntl}. It is specifically \emph{not} designed to do any
|
|---|
| 21 | sending of email messages to SMTP (\rfc{2821}), NNTP, or other servers; those
|
|---|
| 22 | are functions of modules such as \refmodule{smtplib} and \refmodule{nntplib}.
|
|---|
| 23 | The \module{email} package attempts to be as RFC-compliant as possible,
|
|---|
| 24 | supporting in addition to \rfc{2822}, such MIME-related RFCs as
|
|---|
| 25 | \rfc{2045}, \rfc{2046}, \rfc{2047}, and \rfc{2231}.
|
|---|
| 26 |
|
|---|
| 27 | The primary distinguishing feature of the \module{email} package is
|
|---|
| 28 | that it splits the parsing and generating of email messages from the
|
|---|
| 29 | internal \emph{object model} representation of email. Applications
|
|---|
| 30 | using the \module{email} package deal primarily with objects; you can
|
|---|
| 31 | add sub-objects to messages, remove sub-objects from messages,
|
|---|
| 32 | completely re-arrange the contents, etc. There is a separate parser
|
|---|
| 33 | and a separate generator which handles the transformation from flat
|
|---|
| 34 | text to the object model, and then back to flat text again. There
|
|---|
| 35 | are also handy subclasses for some common MIME object types, and a few
|
|---|
| 36 | miscellaneous utilities that help with such common tasks as extracting
|
|---|
| 37 | and parsing message field values, creating RFC-compliant dates, etc.
|
|---|
| 38 |
|
|---|
| 39 | The following sections describe the functionality of the
|
|---|
| 40 | \module{email} package. The ordering follows a progression that
|
|---|
| 41 | should be common in applications: an email message is read as flat
|
|---|
| 42 | text from a file or other source, the text is parsed to produce the
|
|---|
| 43 | object structure of the email message, this structure is manipulated,
|
|---|
| 44 | and finally, the object tree is rendered back into flat text.
|
|---|
| 45 |
|
|---|
| 46 | It is perfectly feasible to create the object structure out of whole
|
|---|
| 47 | cloth --- i.e. completely from scratch. From there, a similar
|
|---|
| 48 | progression can be taken as above.
|
|---|
| 49 |
|
|---|
| 50 | Also included are detailed specifications of all the classes and
|
|---|
| 51 | modules that the \module{email} package provides, the exception
|
|---|
| 52 | classes you might encounter while using the \module{email} package,
|
|---|
| 53 | some auxiliary utilities, and a few examples. For users of the older
|
|---|
| 54 | \module{mimelib} package, or previous versions of the \module{email}
|
|---|
| 55 | package, a section on differences and porting is provided.
|
|---|
| 56 |
|
|---|
| 57 | \begin{seealso}
|
|---|
| 58 | \seemodule{smtplib}{SMTP protocol client}
|
|---|
| 59 | \seemodule{nntplib}{NNTP protocol client}
|
|---|
| 60 | \end{seealso}
|
|---|
| 61 |
|
|---|
| 62 | \subsection{Representing an email message}
|
|---|
| 63 | \input{emailmessage}
|
|---|
| 64 |
|
|---|
| 65 | \subsection{Parsing email messages}
|
|---|
| 66 | \input{emailparser}
|
|---|
| 67 |
|
|---|
| 68 | \subsection{Generating MIME documents}
|
|---|
| 69 | \input{emailgenerator}
|
|---|
| 70 |
|
|---|
| 71 | \subsection{Creating email and MIME objects from scratch}
|
|---|
| 72 | \input{emailmimebase}
|
|---|
| 73 |
|
|---|
| 74 | \subsection{Internationalized headers}
|
|---|
| 75 | \input{emailheaders}
|
|---|
| 76 |
|
|---|
| 77 | \subsection{Representing character sets}
|
|---|
| 78 | \input{emailcharsets}
|
|---|
| 79 |
|
|---|
| 80 | \subsection{Encoders}
|
|---|
| 81 | \input{emailencoders}
|
|---|
| 82 |
|
|---|
| 83 | \subsection{Exception and Defect classes}
|
|---|
| 84 | \input{emailexc}
|
|---|
| 85 |
|
|---|
| 86 | \subsection{Miscellaneous utilities}
|
|---|
| 87 | \input{emailutil}
|
|---|
| 88 |
|
|---|
| 89 | \subsection{Iterators}
|
|---|
| 90 | \input{emailiter}
|
|---|
| 91 |
|
|---|
| 92 | \subsection{Package History\label{email-pkg-history}}
|
|---|
| 93 |
|
|---|
| 94 | This table describes the release history of the email package, corresponding
|
|---|
| 95 | to the version of Python that the package was released with. For purposes of
|
|---|
| 96 | this document, when you see a note about change or added versions, these refer
|
|---|
| 97 | to the Python version the change was made it, \emph{not} the email package
|
|---|
| 98 | version. This table also describes the Python compatibility of each version
|
|---|
| 99 | of the package.
|
|---|
| 100 |
|
|---|
| 101 | \begin{tableiii}{l|l|l}{constant}{email version}{distributed with}{compatible with}
|
|---|
| 102 | \lineiii{1.x}{Python 2.2.0 to Python 2.2.1}{\emph{no longer supported}}
|
|---|
| 103 | \lineiii{2.5}{Python 2.2.2+ and Python 2.3}{Python 2.1 to 2.5}
|
|---|
| 104 | \lineiii{3.0}{Python 2.4}{Python 2.3 to 2.5}
|
|---|
| 105 | \lineiii{4.0}{Python 2.5}{Python 2.3 to 2.5}
|
|---|
| 106 | \end{tableiii}
|
|---|
| 107 |
|
|---|
| 108 | Here are the major differences between \module{email} version 4 and version 3:
|
|---|
| 109 |
|
|---|
| 110 | \begin{itemize}
|
|---|
| 111 | \item All modules have been renamed according to \pep{8} standards. For
|
|---|
| 112 | example, the version 3 module \module{email.Message} was renamed to
|
|---|
| 113 | \module{email.message} in version 4.
|
|---|
| 114 |
|
|---|
| 115 | \item A new subpackage \module{email.mime} was added and all the version 3
|
|---|
| 116 | \module{email.MIME*} modules were renamed and situated into the
|
|---|
| 117 | \module{email.mime} subpackage. For example, the version 3 module
|
|---|
| 118 | \module{email.MIMEText} was renamed to \module{email.mime.text}.
|
|---|
| 119 |
|
|---|
| 120 | \emph{Note that the version 3 names will continue to work until Python
|
|---|
| 121 | 2.6}.
|
|---|
| 122 |
|
|---|
| 123 | \item The \module{email.mime.application} module was added, which contains the
|
|---|
| 124 | \class{MIMEApplication} class.
|
|---|
| 125 |
|
|---|
| 126 | \item Methods that were deprecated in version 3 have been removed. These
|
|---|
| 127 | include \method{Generator.__call__()}, \method{Message.get_type()},
|
|---|
| 128 | \method{Message.get_main_type()}, \method{Message.get_subtype()}.
|
|---|
| 129 |
|
|---|
| 130 | \item Fixes have been added for \rfc{2231} support which can change some of
|
|---|
| 131 | the return types for \function{Message.get_param()} and friends. Under
|
|---|
| 132 | some circumstances, values which used to return a 3-tuple now return
|
|---|
| 133 | simple strings (specifically, if all extended parameter segments were
|
|---|
| 134 | unencoded, there is no language and charset designation expected, so the
|
|---|
| 135 | return type is now a simple string). Also, \%-decoding used to be done
|
|---|
| 136 | for both encoded and unencoded segments; this decoding is now done only
|
|---|
| 137 | for encoded segments.
|
|---|
| 138 | \end{itemize}
|
|---|
| 139 |
|
|---|
| 140 | Here are the major differences between \module{email} version 3 and version 2:
|
|---|
| 141 |
|
|---|
| 142 | \begin{itemize}
|
|---|
| 143 | \item The \class{FeedParser} class was introduced, and the \class{Parser}
|
|---|
| 144 | class was implemented in terms of the \class{FeedParser}. All parsing
|
|---|
| 145 | therefore is non-strict, and parsing will make a best effort never to
|
|---|
| 146 | raise an exception. Problems found while parsing messages are stored in
|
|---|
| 147 | the message's \var{defect} attribute.
|
|---|
| 148 |
|
|---|
| 149 | \item All aspects of the API which raised \exception{DeprecationWarning}s in
|
|---|
| 150 | version 2 have been removed. These include the \var{_encoder} argument
|
|---|
| 151 | to the \class{MIMEText} constructor, the \method{Message.add_payload()}
|
|---|
| 152 | method, the \function{Utils.dump_address_pair()} function, and the
|
|---|
| 153 | functions \function{Utils.decode()} and \function{Utils.encode()}.
|
|---|
| 154 |
|
|---|
| 155 | \item New \exception{DeprecationWarning}s have been added to:
|
|---|
| 156 | \method{Generator.__call__()}, \method{Message.get_type()},
|
|---|
| 157 | \method{Message.get_main_type()}, \method{Message.get_subtype()}, and
|
|---|
| 158 | the \var{strict} argument to the \class{Parser} class. These are
|
|---|
| 159 | expected to be removed in future versions.
|
|---|
| 160 |
|
|---|
| 161 | \item Support for Pythons earlier than 2.3 has been removed.
|
|---|
| 162 | \end{itemize}
|
|---|
| 163 |
|
|---|
| 164 | Here are the differences between \module{email} version 2 and version 1:
|
|---|
| 165 |
|
|---|
| 166 | \begin{itemize}
|
|---|
| 167 | \item The \module{email.Header} and \module{email.Charset} modules
|
|---|
| 168 | have been added.
|
|---|
| 169 |
|
|---|
| 170 | \item The pickle format for \class{Message} instances has changed.
|
|---|
| 171 | Since this was never (and still isn't) formally defined, this
|
|---|
| 172 | isn't considered a backward incompatibility. However if your
|
|---|
| 173 | application pickles and unpickles \class{Message} instances, be
|
|---|
| 174 | aware that in \module{email} version 2, \class{Message}
|
|---|
| 175 | instances now have private variables \var{_charset} and
|
|---|
| 176 | \var{_default_type}.
|
|---|
| 177 |
|
|---|
| 178 | \item Several methods in the \class{Message} class have been
|
|---|
| 179 | deprecated, or their signatures changed. Also, many new methods
|
|---|
| 180 | have been added. See the documentation for the \class{Message}
|
|---|
| 181 | class for details. The changes should be completely backward
|
|---|
| 182 | compatible.
|
|---|
| 183 |
|
|---|
| 184 | \item The object structure has changed in the face of
|
|---|
| 185 | \mimetype{message/rfc822} content types. In \module{email}
|
|---|
| 186 | version 1, such a type would be represented by a scalar payload,
|
|---|
| 187 | i.e. the container message's \method{is_multipart()} returned
|
|---|
| 188 | false, \method{get_payload()} was not a list object, but a single
|
|---|
| 189 | \class{Message} instance.
|
|---|
| 190 |
|
|---|
| 191 | This structure was inconsistent with the rest of the package, so
|
|---|
| 192 | the object representation for \mimetype{message/rfc822} content
|
|---|
| 193 | types was changed. In \module{email} version 2, the container
|
|---|
| 194 | \emph{does} return \code{True} from \method{is_multipart()}, and
|
|---|
| 195 | \method{get_payload()} returns a list containing a single
|
|---|
| 196 | \class{Message} item.
|
|---|
| 197 |
|
|---|
| 198 | Note that this is one place that backward compatibility could
|
|---|
| 199 | not be completely maintained. However, if you're already
|
|---|
| 200 | testing the return type of \method{get_payload()}, you should be
|
|---|
| 201 | fine. You just need to make sure your code doesn't do a
|
|---|
| 202 | \method{set_payload()} with a \class{Message} instance on a
|
|---|
| 203 | container with a content type of \mimetype{message/rfc822}.
|
|---|
| 204 |
|
|---|
| 205 | \item The \class{Parser} constructor's \var{strict} argument was
|
|---|
| 206 | added, and its \method{parse()} and \method{parsestr()} methods
|
|---|
| 207 | grew a \var{headersonly} argument. The \var{strict} flag was
|
|---|
| 208 | also added to functions \function{email.message_from_file()}
|
|---|
| 209 | and \function{email.message_from_string()}.
|
|---|
| 210 |
|
|---|
| 211 | \item \method{Generator.__call__()} is deprecated; use
|
|---|
| 212 | \method{Generator.flatten()} instead. The \class{Generator}
|
|---|
| 213 | class has also grown the \method{clone()} method.
|
|---|
| 214 |
|
|---|
| 215 | \item The \class{DecodedGenerator} class in the
|
|---|
| 216 | \module{email.Generator} module was added.
|
|---|
| 217 |
|
|---|
| 218 | \item The intermediate base classes \class{MIMENonMultipart} and
|
|---|
| 219 | \class{MIMEMultipart} have been added, and interposed in the
|
|---|
| 220 | class hierarchy for most of the other MIME-related derived
|
|---|
| 221 | classes.
|
|---|
| 222 |
|
|---|
| 223 | \item The \var{_encoder} argument to the \class{MIMEText} constructor
|
|---|
| 224 | has been deprecated. Encoding now happens implicitly based
|
|---|
| 225 | on the \var{_charset} argument.
|
|---|
| 226 |
|
|---|
| 227 | \item The following functions in the \module{email.Utils} module have
|
|---|
| 228 | been deprecated: \function{dump_address_pairs()},
|
|---|
| 229 | \function{decode()}, and \function{encode()}. The following
|
|---|
| 230 | functions have been added to the module:
|
|---|
| 231 | \function{make_msgid()}, \function{decode_rfc2231()},
|
|---|
| 232 | \function{encode_rfc2231()}, and \function{decode_params()}.
|
|---|
| 233 |
|
|---|
| 234 | \item The non-public function \function{email.Iterators._structure()}
|
|---|
| 235 | was added.
|
|---|
| 236 | \end{itemize}
|
|---|
| 237 |
|
|---|
| 238 | \subsection{Differences from \module{mimelib}}
|
|---|
| 239 |
|
|---|
| 240 | The \module{email} package was originally prototyped as a separate
|
|---|
| 241 | library called
|
|---|
| 242 | \ulink{\module{mimelib}}{http://mimelib.sf.net/}.
|
|---|
| 243 | Changes have been made so that
|
|---|
| 244 | method names are more consistent, and some methods or modules have
|
|---|
| 245 | either been added or removed. The semantics of some of the methods
|
|---|
| 246 | have also changed. For the most part, any functionality available in
|
|---|
| 247 | \module{mimelib} is still available in the \refmodule{email} package,
|
|---|
| 248 | albeit often in a different way. Backward compatibility between
|
|---|
| 249 | the \module{mimelib} package and the \module{email} package was not a
|
|---|
| 250 | priority.
|
|---|
| 251 |
|
|---|
| 252 | Here is a brief description of the differences between the
|
|---|
| 253 | \module{mimelib} and the \refmodule{email} packages, along with hints on
|
|---|
| 254 | how to port your applications.
|
|---|
| 255 |
|
|---|
| 256 | Of course, the most visible difference between the two packages is
|
|---|
| 257 | that the package name has been changed to \refmodule{email}. In
|
|---|
| 258 | addition, the top-level package has the following differences:
|
|---|
| 259 |
|
|---|
| 260 | \begin{itemize}
|
|---|
| 261 | \item \function{messageFromString()} has been renamed to
|
|---|
| 262 | \function{message_from_string()}.
|
|---|
| 263 |
|
|---|
| 264 | \item \function{messageFromFile()} has been renamed to
|
|---|
| 265 | \function{message_from_file()}.
|
|---|
| 266 |
|
|---|
| 267 | \end{itemize}
|
|---|
| 268 |
|
|---|
| 269 | The \class{Message} class has the following differences:
|
|---|
| 270 |
|
|---|
| 271 | \begin{itemize}
|
|---|
| 272 | \item The method \method{asString()} was renamed to \method{as_string()}.
|
|---|
| 273 |
|
|---|
| 274 | \item The method \method{ismultipart()} was renamed to
|
|---|
| 275 | \method{is_multipart()}.
|
|---|
| 276 |
|
|---|
| 277 | \item The \method{get_payload()} method has grown a \var{decode}
|
|---|
| 278 | optional argument.
|
|---|
| 279 |
|
|---|
| 280 | \item The method \method{getall()} was renamed to \method{get_all()}.
|
|---|
| 281 |
|
|---|
| 282 | \item The method \method{addheader()} was renamed to \method{add_header()}.
|
|---|
| 283 |
|
|---|
| 284 | \item The method \method{gettype()} was renamed to \method{get_type()}.
|
|---|
| 285 |
|
|---|
| 286 | \item The method \method{getmaintype()} was renamed to
|
|---|
| 287 | \method{get_main_type()}.
|
|---|
| 288 |
|
|---|
| 289 | \item The method \method{getsubtype()} was renamed to
|
|---|
| 290 | \method{get_subtype()}.
|
|---|
| 291 |
|
|---|
| 292 | \item The method \method{getparams()} was renamed to
|
|---|
| 293 | \method{get_params()}.
|
|---|
| 294 | Also, whereas \method{getparams()} returned a list of strings,
|
|---|
| 295 | \method{get_params()} returns a list of 2-tuples, effectively
|
|---|
| 296 | the key/value pairs of the parameters, split on the \character{=}
|
|---|
| 297 | sign.
|
|---|
| 298 |
|
|---|
| 299 | \item The method \method{getparam()} was renamed to \method{get_param()}.
|
|---|
| 300 |
|
|---|
| 301 | \item The method \method{getcharsets()} was renamed to
|
|---|
| 302 | \method{get_charsets()}.
|
|---|
| 303 |
|
|---|
| 304 | \item The method \method{getfilename()} was renamed to
|
|---|
| 305 | \method{get_filename()}.
|
|---|
| 306 |
|
|---|
| 307 | \item The method \method{getboundary()} was renamed to
|
|---|
| 308 | \method{get_boundary()}.
|
|---|
| 309 |
|
|---|
| 310 | \item The method \method{setboundary()} was renamed to
|
|---|
| 311 | \method{set_boundary()}.
|
|---|
| 312 |
|
|---|
| 313 | \item The method \method{getdecodedpayload()} was removed. To get
|
|---|
| 314 | similar functionality, pass the value 1 to the \var{decode} flag
|
|---|
| 315 | of the {get_payload()} method.
|
|---|
| 316 |
|
|---|
| 317 | \item The method \method{getpayloadastext()} was removed. Similar
|
|---|
| 318 | functionality
|
|---|
| 319 | is supported by the \class{DecodedGenerator} class in the
|
|---|
| 320 | \refmodule{email.generator} module.
|
|---|
| 321 |
|
|---|
| 322 | \item The method \method{getbodyastext()} was removed. You can get
|
|---|
| 323 | similar functionality by creating an iterator with
|
|---|
| 324 | \function{typed_subpart_iterator()} in the
|
|---|
| 325 | \refmodule{email.iterators} module.
|
|---|
| 326 | \end{itemize}
|
|---|
| 327 |
|
|---|
| 328 | The \class{Parser} class has no differences in its public interface.
|
|---|
| 329 | It does have some additional smarts to recognize
|
|---|
| 330 | \mimetype{message/delivery-status} type messages, which it represents as
|
|---|
| 331 | a \class{Message} instance containing separate \class{Message}
|
|---|
| 332 | subparts for each header block in the delivery status
|
|---|
| 333 | notification\footnote{Delivery Status Notifications (DSN) are defined
|
|---|
| 334 | in \rfc{1894}.}.
|
|---|
| 335 |
|
|---|
| 336 | The \class{Generator} class has no differences in its public
|
|---|
| 337 | interface. There is a new class in the \refmodule{email.generator}
|
|---|
| 338 | module though, called \class{DecodedGenerator} which provides most of
|
|---|
| 339 | the functionality previously available in the
|
|---|
| 340 | \method{Message.getpayloadastext()} method.
|
|---|
| 341 |
|
|---|
| 342 | The following modules and classes have been changed:
|
|---|
| 343 |
|
|---|
| 344 | \begin{itemize}
|
|---|
| 345 | \item The \class{MIMEBase} class constructor arguments \var{_major}
|
|---|
| 346 | and \var{_minor} have changed to \var{_maintype} and
|
|---|
| 347 | \var{_subtype} respectively.
|
|---|
| 348 |
|
|---|
| 349 | \item The \code{Image} class/module has been renamed to
|
|---|
| 350 | \code{MIMEImage}. The \var{_minor} argument has been renamed to
|
|---|
| 351 | \var{_subtype}.
|
|---|
| 352 |
|
|---|
| 353 | \item The \code{Text} class/module has been renamed to
|
|---|
| 354 | \code{MIMEText}. The \var{_minor} argument has been renamed to
|
|---|
| 355 | \var{_subtype}.
|
|---|
| 356 |
|
|---|
| 357 | \item The \code{MessageRFC822} class/module has been renamed to
|
|---|
| 358 | \code{MIMEMessage}. Note that an earlier version of
|
|---|
| 359 | \module{mimelib} called this class/module \code{RFC822}, but
|
|---|
| 360 | that clashed with the Python standard library module
|
|---|
| 361 | \refmodule{rfc822} on some case-insensitive file systems.
|
|---|
| 362 |
|
|---|
| 363 | Also, the \class{MIMEMessage} class now represents any kind of
|
|---|
| 364 | MIME message with main type \mimetype{message}. It takes an
|
|---|
| 365 | optional argument \var{_subtype} which is used to set the MIME
|
|---|
| 366 | subtype. \var{_subtype} defaults to \mimetype{rfc822}.
|
|---|
| 367 | \end{itemize}
|
|---|
| 368 |
|
|---|
| 369 | \module{mimelib} provided some utility functions in its
|
|---|
| 370 | \module{address} and \module{date} modules. All of these functions
|
|---|
| 371 | have been moved to the \refmodule{email.utils} module.
|
|---|
| 372 |
|
|---|
| 373 | The \code{MsgReader} class/module has been removed. Its functionality
|
|---|
| 374 | is most closely supported in the \function{body_line_iterator()}
|
|---|
| 375 | function in the \refmodule{email.iterators} module.
|
|---|
| 376 |
|
|---|
| 377 | \subsection{Examples}
|
|---|
| 378 |
|
|---|
| 379 | Here are a few examples of how to use the \module{email} package to
|
|---|
| 380 | read, write, and send simple email messages, as well as more complex
|
|---|
| 381 | MIME messages.
|
|---|
| 382 |
|
|---|
| 383 | First, let's see how to create and send a simple text message:
|
|---|
| 384 |
|
|---|
| 385 | \verbatiminput{email-simple.py}
|
|---|
| 386 |
|
|---|
| 387 | Here's an example of how to send a MIME message containing a bunch of
|
|---|
| 388 | family pictures that may be residing in a directory:
|
|---|
| 389 |
|
|---|
| 390 | \verbatiminput{email-mime.py}
|
|---|
| 391 |
|
|---|
| 392 | Here's an example of how to send the entire contents of a directory as
|
|---|
| 393 | an email message:
|
|---|
| 394 | \footnote{Thanks to Matthew Dixon Cowles for the original inspiration
|
|---|
| 395 | and examples.}
|
|---|
| 396 |
|
|---|
| 397 | \verbatiminput{email-dir.py}
|
|---|
| 398 |
|
|---|
| 399 | And finally, here's an example of how to unpack a MIME message like
|
|---|
| 400 | the one above, into a directory of files:
|
|---|
| 401 |
|
|---|
| 402 | \verbatiminput{email-unpack.py}
|
|---|