symbian-qemu-0.9.1-12/python-2.6.1/Doc/library/smtplib.rst
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 
       
     2 :mod:`smtplib` --- SMTP protocol client
       
     3 =======================================
       
     4 
       
     5 .. module:: smtplib
       
     6    :synopsis: SMTP protocol client (requires sockets).
       
     7 .. sectionauthor:: Eric S. Raymond <esr@snark.thyrsus.com>
       
     8 
       
     9 
       
    10 .. index::
       
    11    pair: SMTP; protocol
       
    12    single: Simple Mail Transfer Protocol
       
    13 
       
    14 The :mod:`smtplib` module defines an SMTP client session object that can be used
       
    15 to send mail to any Internet machine with an SMTP or ESMTP listener daemon.  For
       
    16 details of SMTP and ESMTP operation, consult :rfc:`821` (Simple Mail Transfer
       
    17 Protocol) and :rfc:`1869` (SMTP Service Extensions).
       
    18 
       
    19 
       
    20 .. class:: SMTP([host[, port[, local_hostname[, timeout]]]])
       
    21 
       
    22    A :class:`SMTP` instance encapsulates an SMTP connection.  It has methods
       
    23    that support a full repertoire of SMTP and ESMTP operations. If the optional
       
    24    host and port parameters are given, the SMTP :meth:`connect` method is called
       
    25    with those parameters during initialization.  An :exc:`SMTPConnectError` is
       
    26    raised if the specified host doesn't respond correctly. The optional
       
    27    *timeout* parameter specifies a timeout in seconds for blocking operations
       
    28    like the connection attempt (if not specified, the global default timeout
       
    29    setting will be used).
       
    30 
       
    31    For normal use, you should only require the initialization/connect,
       
    32    :meth:`sendmail`, and :meth:`quit` methods.  An example is included below.
       
    33 
       
    34    .. versionchanged:: 2.6
       
    35       *timeout* was added.
       
    36 
       
    37 
       
    38 .. class:: SMTP_SSL([host[, port[, local_hostname[, keyfile[, certfile[, timeout]]]]]])
       
    39 
       
    40    A :class:`SMTP_SSL` instance behaves exactly the same as instances of
       
    41    :class:`SMTP`. :class:`SMTP_SSL` should be used for situations where SSL is
       
    42    required from the beginning of the connection and using :meth:`starttls` is
       
    43    not appropriate. If *host* is not specified, the local host is used. If
       
    44    *port* is omitted, the standard SMTP-over-SSL port (465) is used. *keyfile*
       
    45    and *certfile* are also optional, and can contain a PEM formatted private key
       
    46    and certificate chain file for the SSL connection. The optional *timeout*
       
    47    parameter specifies a timeout in seconds for blocking operations like the
       
    48    connection attempt (if not specified, the global default timeout setting
       
    49    will be used).
       
    50 
       
    51    .. versionchanged:: 2.6
       
    52       *timeout* was added.
       
    53 
       
    54 
       
    55 .. class:: LMTP([host[, port[, local_hostname]]])
       
    56 
       
    57    The LMTP protocol, which is very similar to ESMTP, is heavily based on the
       
    58    standard SMTP client. It's common to use Unix sockets for LMTP, so our :meth:`connect`
       
    59    method must support that as well as a regular host:port server. To specify a
       
    60    Unix socket, you must use an absolute path for *host*, starting with a '/'.
       
    61 
       
    62    Authentication is supported, using the regular SMTP mechanism. When using a Unix
       
    63    socket, LMTP generally don't support or require any authentication, but your
       
    64    mileage might vary.
       
    65 
       
    66    .. versionadded:: 2.6
       
    67 
       
    68 A nice selection of exceptions is defined as well:
       
    69 
       
    70 
       
    71 .. exception:: SMTPException
       
    72 
       
    73    Base exception class for all exceptions raised by this module.
       
    74 
       
    75 
       
    76 .. exception:: SMTPServerDisconnected
       
    77 
       
    78    This exception is raised when the server unexpectedly disconnects, or when an
       
    79    attempt is made to use the :class:`SMTP` instance before connecting it to a
       
    80    server.
       
    81 
       
    82 
       
    83 .. exception:: SMTPResponseException
       
    84 
       
    85    Base class for all exceptions that include an SMTP error code. These exceptions
       
    86    are generated in some instances when the SMTP server returns an error code.  The
       
    87    error code is stored in the :attr:`smtp_code` attribute of the error, and the
       
    88    :attr:`smtp_error` attribute is set to the error message.
       
    89 
       
    90 
       
    91 .. exception:: SMTPSenderRefused
       
    92 
       
    93    Sender address refused.  In addition to the attributes set by on all
       
    94    :exc:`SMTPResponseException` exceptions, this sets 'sender' to the string that
       
    95    the SMTP server refused.
       
    96 
       
    97 
       
    98 .. exception:: SMTPRecipientsRefused
       
    99 
       
   100    All recipient addresses refused.  The errors for each recipient are accessible
       
   101    through the attribute :attr:`recipients`, which is a dictionary of exactly the
       
   102    same sort as :meth:`SMTP.sendmail` returns.
       
   103 
       
   104 
       
   105 .. exception:: SMTPDataError
       
   106 
       
   107    The SMTP server refused to accept the message data.
       
   108 
       
   109 
       
   110 .. exception:: SMTPConnectError
       
   111 
       
   112    Error occurred during establishment of a connection  with the server.
       
   113 
       
   114 
       
   115 .. exception:: SMTPHeloError
       
   116 
       
   117    The server refused our ``HELO`` message.
       
   118 
       
   119 
       
   120 .. exception:: SMTPAuthenticationError
       
   121 
       
   122    SMTP authentication went wrong.  Most probably the server didn't accept the
       
   123    username/password combination provided.
       
   124 
       
   125 
       
   126 .. seealso::
       
   127 
       
   128    :rfc:`821` - Simple Mail Transfer Protocol
       
   129       Protocol definition for SMTP.  This document covers the model, operating
       
   130       procedure, and protocol details for SMTP.
       
   131 
       
   132    :rfc:`1869` - SMTP Service Extensions
       
   133       Definition of the ESMTP extensions for SMTP.  This describes a framework for
       
   134       extending SMTP with new commands, supporting dynamic discovery of the commands
       
   135       provided by the server, and defines a few additional commands.
       
   136 
       
   137 
       
   138 .. _smtp-objects:
       
   139 
       
   140 SMTP Objects
       
   141 ------------
       
   142 
       
   143 An :class:`SMTP` instance has the following methods:
       
   144 
       
   145 
       
   146 .. method:: SMTP.set_debuglevel(level)
       
   147 
       
   148    Set the debug output level.  A true value for *level* results in debug messages
       
   149    for connection and for all messages sent to and received from the server.
       
   150 
       
   151 
       
   152 .. method:: SMTP.connect([host[, port]])
       
   153 
       
   154    Connect to a host on a given port.  The defaults are to connect to the local
       
   155    host at the standard SMTP port (25). If the hostname ends with a colon (``':'``)
       
   156    followed by a number, that suffix will be stripped off and the number
       
   157    interpreted as the port number to use. This method is automatically invoked by
       
   158    the constructor if a host is specified during instantiation.
       
   159 
       
   160 
       
   161 .. method:: SMTP.docmd(cmd, [, argstring])
       
   162 
       
   163    Send a command *cmd* to the server.  The optional argument *argstring* is simply
       
   164    concatenated to the command, separated by a space.
       
   165 
       
   166    This returns a 2-tuple composed of a numeric response code and the actual
       
   167    response line (multiline responses are joined into one long line.)
       
   168 
       
   169    In normal operation it should not be necessary to call this method explicitly.
       
   170    It is used to implement other methods and may be useful for testing private
       
   171    extensions.
       
   172 
       
   173    If the connection to the server is lost while waiting for the reply,
       
   174    :exc:`SMTPServerDisconnected` will be raised.
       
   175 
       
   176 
       
   177 .. method:: SMTP.helo([hostname])
       
   178 
       
   179    Identify yourself to the SMTP server using ``HELO``.  The hostname argument
       
   180    defaults to the fully qualified domain name of the local host.
       
   181    The message returned by the server is stored as the :attr:`helo_resp` attribute
       
   182    of the object.
       
   183 
       
   184    In normal operation it should not be necessary to call this method explicitly.
       
   185    It will be implicitly called by the :meth:`sendmail` when necessary.
       
   186 
       
   187 
       
   188 .. method:: SMTP.ehlo([hostname])
       
   189 
       
   190    Identify yourself to an ESMTP server using ``EHLO``.  The hostname argument
       
   191    defaults to the fully qualified domain name of the local host.  Examine the
       
   192    response for ESMTP option and store them for use by :meth:`has_extn`. 
       
   193    Also sets several informational attributes: the message returned by 
       
   194    the server is stored as the :attr:`ehlo_resp` attribute, :attr:`does_esmtp` 
       
   195    is set to true or false depending on whether the server supports ESMTP, and
       
   196    :attr:`esmtp_features` will be a dictionary containing the names of the
       
   197    SMTP service extensions this server supports, and their
       
   198    parameters (if any).
       
   199 
       
   200    Unless you wish to use :meth:`has_extn` before sending mail, it should not be
       
   201    necessary to call this method explicitly.  It will be implicitly called by
       
   202    :meth:`sendmail` when necessary.
       
   203 
       
   204 .. method:: SMTP.ehlo_or_helo_if_needed()
       
   205 
       
   206    This method call :meth:`ehlo` and or :meth:`helo` if there has been no
       
   207    previous ``EHLO`` or ``HELO`` command this session.  It tries ESMTP ``EHLO``
       
   208    first.
       
   209 
       
   210    :exc:SMTPHeloError
       
   211      The server didn't reply properly to the ``HELO`` greeting.
       
   212 
       
   213    .. versionadded:: 2.6
       
   214 
       
   215 .. method:: SMTP.has_extn(name)
       
   216 
       
   217    Return :const:`True` if *name* is in the set of SMTP service extensions returned
       
   218    by the server, :const:`False` otherwise. Case is ignored.
       
   219 
       
   220 
       
   221 .. method:: SMTP.verify(address)
       
   222 
       
   223    Check the validity of an address on this server using SMTP ``VRFY``. Returns a
       
   224    tuple consisting of code 250 and a full :rfc:`822` address (including human
       
   225    name) if the user address is valid. Otherwise returns an SMTP error code of 400
       
   226    or greater and an error string.
       
   227 
       
   228    .. note::
       
   229 
       
   230       Many sites disable SMTP ``VRFY`` in order to foil spammers.
       
   231 
       
   232 
       
   233 .. method:: SMTP.login(user, password)
       
   234 
       
   235    Log in on an SMTP server that requires authentication. The arguments are the
       
   236    username and the password to authenticate with. If there has been no previous
       
   237    ``EHLO`` or ``HELO`` command this session, this method tries ESMTP ``EHLO``
       
   238    first. This method will return normally if the authentication was successful, or
       
   239    may raise the following exceptions:
       
   240 
       
   241    :exc:`SMTPHeloError`
       
   242       The server didn't reply properly to the ``HELO`` greeting.
       
   243 
       
   244    :exc:`SMTPAuthenticationError`
       
   245       The server didn't accept the username/password combination.
       
   246 
       
   247    :exc:`SMTPException`
       
   248       No suitable authentication method was found.
       
   249 
       
   250 
       
   251 .. method:: SMTP.starttls([keyfile[, certfile]])
       
   252 
       
   253    Put the SMTP connection in TLS (Transport Layer Security) mode.  All SMTP
       
   254    commands that follow will be encrypted.  You should then call :meth:`ehlo`
       
   255    again.
       
   256 
       
   257    If *keyfile* and *certfile* are provided, these are passed to the :mod:`socket`
       
   258    module's :func:`ssl` function.
       
   259 
       
   260    If there has been no previous ``EHLO`` or ``HELO`` command this session,
       
   261    this method tries ESMTP ``EHLO`` first.
       
   262 
       
   263    .. versionchanged:: 2.6
       
   264 
       
   265    :exc:`SMTPHeloError`
       
   266       The server didn't reply properly to the ``HELO`` greeting.
       
   267 
       
   268    :exc:`SMTPException`
       
   269      The server does not support the STARTTLS extension.
       
   270 
       
   271    .. versionchanged:: 2.6
       
   272 
       
   273    :exc:`RuntimeError`
       
   274      SSL/TLS support is not available to your python interpreter.
       
   275 
       
   276 
       
   277 .. method:: SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
       
   278 
       
   279    Send mail.  The required arguments are an :rfc:`822` from-address string, a list
       
   280    of :rfc:`822` to-address strings (a bare string will be treated as a list with 1
       
   281    address), and a message string.  The caller may pass a list of ESMTP options
       
   282    (such as ``8bitmime``) to be used in ``MAIL FROM`` commands as *mail_options*.
       
   283    ESMTP options (such as ``DSN`` commands) that should be used with all ``RCPT``
       
   284    commands can be passed as *rcpt_options*.  (If you need to use different ESMTP
       
   285    options to different recipients you have to use the low-level methods such as
       
   286    :meth:`mail`, :meth:`rcpt` and :meth:`data` to send the message.)
       
   287 
       
   288    .. note::
       
   289 
       
   290       The *from_addr* and *to_addrs* parameters are used to construct the message
       
   291       envelope used by the transport agents. The :class:`SMTP` does not modify the
       
   292       message headers in any way.
       
   293 
       
   294    If there has been no previous ``EHLO`` or ``HELO`` command this session, this
       
   295    method tries ESMTP ``EHLO`` first. If the server does ESMTP, message size and
       
   296    each of the specified options will be passed to it (if the option is in the
       
   297    feature set the server advertises).  If ``EHLO`` fails, ``HELO`` will be tried
       
   298    and ESMTP options suppressed.
       
   299 
       
   300    This method will return normally if the mail is accepted for at least one
       
   301    recipient. Otherwise it will throw an exception.  That is, if this method does
       
   302    not throw an exception, then someone should get your mail. If this method does
       
   303    not throw an exception, it returns a dictionary, with one entry for each
       
   304    recipient that was refused.  Each entry contains a tuple of the SMTP error code
       
   305    and the accompanying error message sent by the server.
       
   306 
       
   307    This method may raise the following exceptions:
       
   308 
       
   309    :exc:`SMTPRecipientsRefused`
       
   310       All recipients were refused.  Nobody got the mail.  The :attr:`recipients`
       
   311       attribute of the exception object is a dictionary with information about the
       
   312       refused recipients (like the one returned when at least one recipient was
       
   313       accepted).
       
   314 
       
   315    :exc:`SMTPHeloError`
       
   316       The server didn't reply properly to the ``HELO`` greeting.
       
   317 
       
   318    :exc:`SMTPSenderRefused`
       
   319       The server didn't accept the *from_addr*.
       
   320 
       
   321    :exc:`SMTPDataError`
       
   322       The server replied with an unexpected error code (other than a refusal of a
       
   323       recipient).
       
   324 
       
   325    Unless otherwise noted, the connection will be open even after an exception is
       
   326    raised.
       
   327 
       
   328 
       
   329 .. method:: SMTP.quit()
       
   330 
       
   331    Terminate the SMTP session and close the connection.  Return the result of
       
   332    the SMTP ``QUIT`` command.
       
   333 
       
   334    .. versionchanged:: 2.6
       
   335       Return a value.
       
   336 
       
   337 
       
   338 Low-level methods corresponding to the standard SMTP/ESMTP commands ``HELP``,
       
   339 ``RSET``, ``NOOP``, ``MAIL``, ``RCPT``, and ``DATA`` are also supported.
       
   340 Normally these do not need to be called directly, so they are not documented
       
   341 here.  For details, consult the module code.
       
   342 
       
   343 
       
   344 .. _smtp-example:
       
   345 
       
   346 SMTP Example
       
   347 ------------
       
   348 
       
   349 This example prompts the user for addresses needed in the message envelope ('To'
       
   350 and 'From' addresses), and the message to be delivered.  Note that the headers
       
   351 to be included with the message must be included in the message as entered; this
       
   352 example doesn't do any processing of the :rfc:`822` headers.  In particular, the
       
   353 'To' and 'From' addresses must be included in the message headers explicitly. ::
       
   354 
       
   355    import smtplib
       
   356 
       
   357    def prompt(prompt):
       
   358        return raw_input(prompt).strip()
       
   359 
       
   360    fromaddr = prompt("From: ")
       
   361    toaddrs  = prompt("To: ").split()
       
   362    print "Enter message, end with ^D (Unix) or ^Z (Windows):"
       
   363 
       
   364    # Add the From: and To: headers at the start!
       
   365    msg = ("From: %s\r\nTo: %s\r\n\r\n"
       
   366           % (fromaddr, ", ".join(toaddrs)))
       
   367    while 1:
       
   368        try:
       
   369            line = raw_input()
       
   370        except EOFError:
       
   371            break
       
   372        if not line:
       
   373            break
       
   374        msg = msg + line
       
   375 
       
   376    print "Message length is " + repr(len(msg))
       
   377 
       
   378    server = smtplib.SMTP('localhost')
       
   379    server.set_debuglevel(1)
       
   380    server.sendmail(fromaddr, toaddrs, msg)
       
   381    server.quit()
       
   382