2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
:mod:`smtplib` --- SMTP protocol client
|
|
|
|
=======================================
|
|
|
|
|
|
|
|
.. module:: smtplib
|
|
|
|
:synopsis: SMTP protocol client (requires sockets).
|
|
|
|
.. sectionauthor:: Eric S. Raymond <esr@snark.thyrsus.com>
|
|
|
|
|
|
|
|
|
|
|
|
.. index::
|
|
|
|
pair: SMTP; protocol
|
|
|
|
single: Simple Mail Transfer Protocol
|
|
|
|
|
|
|
|
The :mod:`smtplib` module defines an SMTP client session object that can be used
|
|
|
|
to send mail to any Internet machine with an SMTP or ESMTP listener daemon. For
|
|
|
|
details of SMTP and ESMTP operation, consult :rfc:`821` (Simple Mail Transfer
|
|
|
|
Protocol) and :rfc:`1869` (SMTP Service Extensions).
|
|
|
|
|
|
|
|
|
|
|
|
.. class:: SMTP([host[, port[, local_hostname[, timeout]]]])
|
|
|
|
|
|
|
|
A :class:`SMTP` instance encapsulates an SMTP connection. It has methods that
|
|
|
|
support a full repertoire of SMTP and ESMTP operations. If the optional host and
|
|
|
|
port parameters are given, the SMTP :meth:`connect` method is called with those
|
|
|
|
parameters during initialization. An :exc:`SMTPConnectError` is raised if the
|
|
|
|
specified host doesn't respond correctly. The optional *timeout* parameter
|
|
|
|
specifies a timeout in seconds for the connection attempt (if not specified, or
|
|
|
|
passed as None, the global default timeout setting will be used).
|
|
|
|
|
|
|
|
For normal use, you should only require the initialization/connect,
|
|
|
|
:meth:`sendmail`, and :meth:`quit` methods. An example is included below.
|
|
|
|
|
|
|
|
|
|
|
|
.. class:: SMTP_SSL([host[, port[, local_hostname[, keyfile[, certfile[, timeout]]]]]])
|
|
|
|
|
|
|
|
A :class:`SMTP_SSL` instance behaves exactly the same as instances of
|
|
|
|
:class:`SMTP`. :class:`SMTP_SSL` should be used for situations where SSL is
|
|
|
|
required from the beginning of the connection and using :meth:`starttls` is not
|
|
|
|
appropriate. If *host* is not specified, the local host is used. If *port* is
|
|
|
|
omitted, the standard SMTP-over-SSL port (465) is used. *keyfile* and *certfile*
|
|
|
|
are also optional, and can contain a PEM formatted private key and certificate
|
|
|
|
chain file for the SSL connection. The optional *timeout* parameter specifies a
|
|
|
|
timeout in seconds for the connection attempt (if not specified, or passed as
|
|
|
|
None, the global default timeout setting will be used).
|
|
|
|
|
|
|
|
|
|
|
|
.. class:: LMTP([host[, port[, local_hostname]]])
|
|
|
|
|
|
|
|
The LMTP protocol, which is very similar to ESMTP, is heavily based on the
|
Merged revisions 57778-58052 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r57820 | georg.brandl | 2007-08-31 08:59:27 +0200 (Fri, 31 Aug 2007) | 2 lines
Document new shorthand notation for index entries.
........
r57827 | georg.brandl | 2007-08-31 10:47:51 +0200 (Fri, 31 Aug 2007) | 2 lines
Fix subitem markup.
........
r57833 | martin.v.loewis | 2007-08-31 12:01:07 +0200 (Fri, 31 Aug 2007) | 1 line
Mark registry components as 64-bit on Win64.
........
r57854 | bill.janssen | 2007-08-31 21:02:23 +0200 (Fri, 31 Aug 2007) | 1 line
deprecate use of FakeSocket
........
r57855 | bill.janssen | 2007-08-31 21:02:46 +0200 (Fri, 31 Aug 2007) | 1 line
remove mentions of socket.ssl in comments
........
r57856 | bill.janssen | 2007-08-31 21:03:31 +0200 (Fri, 31 Aug 2007) | 1 line
remove use of non-existent SSLFakeSocket in apparently untested code
........
r57859 | martin.v.loewis | 2007-09-01 08:36:03 +0200 (Sat, 01 Sep 2007) | 3 lines
Bug #1737210: Change Manufacturer of Windows installer to PSF.
Will backport to 2.5.
........
r57865 | georg.brandl | 2007-09-01 09:51:24 +0200 (Sat, 01 Sep 2007) | 2 lines
Fix RST link (backport from Py3k).
........
r57876 | georg.brandl | 2007-09-01 17:49:49 +0200 (Sat, 01 Sep 2007) | 2 lines
Document sets' ">" and "<" operations (backport from py3k).
........
r57878 | skip.montanaro | 2007-09-01 19:40:03 +0200 (Sat, 01 Sep 2007) | 4 lines
Added a note and examples to explain that re.split does not split on an
empty pattern match. (issue 852532).
........
r57879 | walter.doerwald | 2007-09-01 20:18:09 +0200 (Sat, 01 Sep 2007) | 2 lines
Fix wrong function names.
........
r57880 | walter.doerwald | 2007-09-01 20:34:05 +0200 (Sat, 01 Sep 2007) | 2 lines
Fix typo.
........
r57889 | andrew.kuchling | 2007-09-01 22:31:59 +0200 (Sat, 01 Sep 2007) | 1 line
Markup fix
........
r57892 | andrew.kuchling | 2007-09-01 22:43:36 +0200 (Sat, 01 Sep 2007) | 1 line
Add various items
........
r57895 | andrew.kuchling | 2007-09-01 23:17:58 +0200 (Sat, 01 Sep 2007) | 1 line
Wording change
........
r57896 | andrew.kuchling | 2007-09-01 23:18:31 +0200 (Sat, 01 Sep 2007) | 1 line
Add more items
........
r57904 | ronald.oussoren | 2007-09-02 11:46:07 +0200 (Sun, 02 Sep 2007) | 3 lines
Macosx: this patch ensures that the value of MACOSX_DEPLOYMENT_TARGET used
by the Makefile is also used at configure-time.
........
r57925 | georg.brandl | 2007-09-03 09:16:46 +0200 (Mon, 03 Sep 2007) | 2 lines
Fix #883466: don't allow Unicode as arguments to quopri and uu codecs.
........
r57936 | matthias.klose | 2007-09-04 01:33:04 +0200 (Tue, 04 Sep 2007) | 2 lines
- Added support for linking the bsddb module against BerkeleyDB 4.6.x.
........
r57954 | mark.summerfield | 2007-09-04 10:16:15 +0200 (Tue, 04 Sep 2007) | 3 lines
Added cross-references plus a note about dict & list shallow copying.
........
r57958 | martin.v.loewis | 2007-09-04 11:51:57 +0200 (Tue, 04 Sep 2007) | 3 lines
Document that we rely on the OS to release the crypto
context. Fixes #1626801.
........
r57960 | martin.v.loewis | 2007-09-04 15:13:14 +0200 (Tue, 04 Sep 2007) | 3 lines
Patch #1388440: Add set_completion_display_matches_hook and
get_completion_type to readline.
........
r57961 | martin.v.loewis | 2007-09-04 16:19:28 +0200 (Tue, 04 Sep 2007) | 3 lines
Patch #1031213: Decode source line in SyntaxErrors back to its original
source encoding. Will backport to 2.5.
........
r57972 | matthias.klose | 2007-09-04 20:17:36 +0200 (Tue, 04 Sep 2007) | 3 lines
- Makefile.pre.in(buildbottest): Run an optional script pybuildbot.identify
to include some information about the build environment.
........
r57973 | matthias.klose | 2007-09-04 21:05:38 +0200 (Tue, 04 Sep 2007) | 2 lines
- Makefile.pre.in(buildbottest): Remove whitespace at eol.
........
r57975 | matthias.klose | 2007-09-04 22:46:02 +0200 (Tue, 04 Sep 2007) | 2 lines
- Fix libffi configure for hppa*-*-linux* | parisc*-*-linux*.
........
r57980 | bill.janssen | 2007-09-05 02:46:27 +0200 (Wed, 05 Sep 2007) | 1 line
SSL certificate distinguished names should be represented by tuples
........
r57985 | martin.v.loewis | 2007-09-05 08:39:17 +0200 (Wed, 05 Sep 2007) | 3 lines
Patch #1105: Explain that one needs to build the solution
to get dependencies right.
........
r57987 | armin.rigo | 2007-09-05 09:51:21 +0200 (Wed, 05 Sep 2007) | 4 lines
PyDict_GetItem() returns a borrowed reference.
There are probably a number of places that are open to attacks
such as the following one, in bltinmodule.c:min_max().
........
r57991 | martin.v.loewis | 2007-09-05 13:47:34 +0200 (Wed, 05 Sep 2007) | 3 lines
Patch #786737: Allow building in a tree of symlinks pointing to
a readonly source.
........
r57993 | georg.brandl | 2007-09-05 15:36:44 +0200 (Wed, 05 Sep 2007) | 2 lines
Backport from Py3k: Bug #1684991: explain lookup semantics for __special__ methods (new-style classes only).
........
r58004 | armin.rigo | 2007-09-06 10:30:51 +0200 (Thu, 06 Sep 2007) | 4 lines
Patch #1733973 by peaker:
ptrace_enter_call() assumes no exception is currently set.
This assumption is broken when throwing into a generator.
........
r58006 | armin.rigo | 2007-09-06 11:30:38 +0200 (Thu, 06 Sep 2007) | 4 lines
PyDict_GetItem() returns a borrowed reference.
This attack is against ceval.c:IMPORT_NAME, which calls an
object (__builtin__.__import__) without holding a reference to it.
........
r58013 | georg.brandl | 2007-09-06 16:49:56 +0200 (Thu, 06 Sep 2007) | 2 lines
Backport from 3k: #1116: fix reference to old filename.
........
r58021 | thomas.heller | 2007-09-06 22:26:20 +0200 (Thu, 06 Sep 2007) | 1 line
Fix typo: c_float represents to C float type.
........
r58022 | skip.montanaro | 2007-09-07 00:29:06 +0200 (Fri, 07 Sep 2007) | 3 lines
If this is correct for py3k branch and it's already in the release25-maint
branch, seems like it ought to be on the trunk as well.
........
r58023 | gregory.p.smith | 2007-09-07 00:59:59 +0200 (Fri, 07 Sep 2007) | 4 lines
Apply the fix from Issue1112 to make this test more robust and keep
windows happy.
........
r58031 | brett.cannon | 2007-09-07 05:17:50 +0200 (Fri, 07 Sep 2007) | 4 lines
Make uuid1 and uuid4 tests conditional on whether ctypes can be imported;
implementation of either function depends on ctypes but uuid as a whole does
not.
........
r58032 | brett.cannon | 2007-09-07 06:18:30 +0200 (Fri, 07 Sep 2007) | 6 lines
Fix a crasher where Python code managed to infinitely recurse in C code without
ever going back out to Python code in PyObject_Call(). Required introducing a
static RuntimeError instance so that normalizing an exception there is no
reliance on a recursive call that would put the exception system over the
recursion check itself.
........
r58034 | thomas.heller | 2007-09-07 08:32:17 +0200 (Fri, 07 Sep 2007) | 1 line
Add a 'c_longdouble' type to the ctypes module.
........
r58035 | thomas.heller | 2007-09-07 11:30:40 +0200 (Fri, 07 Sep 2007) | 1 line
Remove unneeded #include.
........
r58036 | thomas.heller | 2007-09-07 11:33:24 +0200 (Fri, 07 Sep 2007) | 6 lines
Backport from py3k branch:
Add a workaround for a strange bug on win64, when _ctypes is compiled
with the SDK compiler. This should fix the failing
Lib\ctypes\test\test_as_parameter.py test.
........
r58037 | georg.brandl | 2007-09-07 16:14:40 +0200 (Fri, 07 Sep 2007) | 2 lines
Fix a wrong indentation for sublists.
........
r58043 | georg.brandl | 2007-09-07 22:10:49 +0200 (Fri, 07 Sep 2007) | 2 lines
#1095: ln -f doesn't work portably, fix in Makefile.
........
r58049 | skip.montanaro | 2007-09-08 02:34:17 +0200 (Sat, 08 Sep 2007) | 1 line
be explicit about the actual location of the missing file
........
2007-09-08 14:39:28 -03:00
|
|
|
standard SMTP client. It's common to use Unix sockets for LMTP, so our :meth:`connect`
|
2007-08-15 11:28:22 -03:00
|
|
|
method must support that as well as a regular host:port server. To specify a
|
|
|
|
Unix socket, you must use an absolute path for *host*, starting with a '/'.
|
|
|
|
|
|
|
|
Authentication is supported, using the regular SMTP mechanism. When using a Unix
|
|
|
|
socket, LMTP generally don't support or require any authentication, but your
|
|
|
|
mileage might vary.
|
|
|
|
|
|
|
|
|
|
|
|
A nice selection of exceptions is defined as well:
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: SMTPException
|
|
|
|
|
|
|
|
Base exception class for all exceptions raised by this module.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: SMTPServerDisconnected
|
|
|
|
|
|
|
|
This exception is raised when the server unexpectedly disconnects, or when an
|
|
|
|
attempt is made to use the :class:`SMTP` instance before connecting it to a
|
|
|
|
server.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: SMTPResponseException
|
|
|
|
|
|
|
|
Base class for all exceptions that include an SMTP error code. These exceptions
|
|
|
|
are generated in some instances when the SMTP server returns an error code. The
|
|
|
|
error code is stored in the :attr:`smtp_code` attribute of the error, and the
|
|
|
|
:attr:`smtp_error` attribute is set to the error message.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: SMTPSenderRefused
|
|
|
|
|
|
|
|
Sender address refused. In addition to the attributes set by on all
|
|
|
|
:exc:`SMTPResponseException` exceptions, this sets 'sender' to the string that
|
|
|
|
the SMTP server refused.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: SMTPRecipientsRefused
|
|
|
|
|
|
|
|
All recipient addresses refused. The errors for each recipient are accessible
|
|
|
|
through the attribute :attr:`recipients`, which is a dictionary of exactly the
|
|
|
|
same sort as :meth:`SMTP.sendmail` returns.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: SMTPDataError
|
|
|
|
|
|
|
|
The SMTP server refused to accept the message data.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: SMTPConnectError
|
|
|
|
|
|
|
|
Error occurred during establishment of a connection with the server.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: SMTPHeloError
|
|
|
|
|
|
|
|
The server refused our ``HELO`` message.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: SMTPAuthenticationError
|
|
|
|
|
|
|
|
SMTP authentication went wrong. Most probably the server didn't accept the
|
|
|
|
username/password combination provided.
|
|
|
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
:rfc:`821` - Simple Mail Transfer Protocol
|
|
|
|
Protocol definition for SMTP. This document covers the model, operating
|
|
|
|
procedure, and protocol details for SMTP.
|
|
|
|
|
|
|
|
:rfc:`1869` - SMTP Service Extensions
|
|
|
|
Definition of the ESMTP extensions for SMTP. This describes a framework for
|
|
|
|
extending SMTP with new commands, supporting dynamic discovery of the commands
|
|
|
|
provided by the server, and defines a few additional commands.
|
|
|
|
|
|
|
|
|
|
|
|
.. _smtp-objects:
|
|
|
|
|
|
|
|
SMTP Objects
|
|
|
|
------------
|
|
|
|
|
|
|
|
An :class:`SMTP` instance has the following methods:
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SMTP.set_debuglevel(level)
|
|
|
|
|
|
|
|
Set the debug output level. A true value for *level* results in debug messages
|
|
|
|
for connection and for all messages sent to and received from the server.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SMTP.connect([host[, port]])
|
|
|
|
|
|
|
|
Connect to a host on a given port. The defaults are to connect to the local
|
|
|
|
host at the standard SMTP port (25). If the hostname ends with a colon (``':'``)
|
|
|
|
followed by a number, that suffix will be stripped off and the number
|
|
|
|
interpreted as the port number to use. This method is automatically invoked by
|
|
|
|
the constructor if a host is specified during instantiation.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SMTP.docmd(cmd, [, argstring])
|
|
|
|
|
|
|
|
Send a command *cmd* to the server. The optional argument *argstring* is simply
|
|
|
|
concatenated to the command, separated by a space.
|
|
|
|
|
|
|
|
This returns a 2-tuple composed of a numeric response code and the actual
|
|
|
|
response line (multiline responses are joined into one long line.)
|
|
|
|
|
|
|
|
In normal operation it should not be necessary to call this method explicitly.
|
|
|
|
It is used to implement other methods and may be useful for testing private
|
|
|
|
extensions.
|
|
|
|
|
|
|
|
If the connection to the server is lost while waiting for the reply,
|
|
|
|
:exc:`SMTPServerDisconnected` will be raised.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SMTP.helo([hostname])
|
|
|
|
|
|
|
|
Identify yourself to the SMTP server using ``HELO``. The hostname argument
|
|
|
|
defaults to the fully qualified domain name of the local host.
|
|
|
|
|
|
|
|
In normal operation it should not be necessary to call this method explicitly.
|
|
|
|
It will be implicitly called by the :meth:`sendmail` when necessary.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SMTP.ehlo([hostname])
|
|
|
|
|
|
|
|
Identify yourself to an ESMTP server using ``EHLO``. The hostname argument
|
|
|
|
defaults to the fully qualified domain name of the local host. Examine the
|
|
|
|
response for ESMTP option and store them for use by :meth:`has_extn`.
|
|
|
|
|
|
|
|
Unless you wish to use :meth:`has_extn` before sending mail, it should not be
|
|
|
|
necessary to call this method explicitly. It will be implicitly called by
|
|
|
|
:meth:`sendmail` when necessary.
|
|
|
|
|
Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r59987 | raymond.hettinger | 2008-01-15 21:52:42 +0100 (Tue, 15 Jan 2008) | 1 line
Refactor if/elif chain for clarity and speed. Remove dependency on subclasses having to implement _empty and _full.
........
r59988 | raymond.hettinger | 2008-01-15 22:22:47 +0100 (Tue, 15 Jan 2008) | 1 line
Fix-up half-written paragraph in the docs
........
r59989 | amaury.forgeotdarc | 2008-01-15 22:25:11 +0100 (Tue, 15 Jan 2008) | 3 lines
test_doctest fails since r59984.
Not sure if these are the correct values, but save_stdout has to be set before its usage...
........
r59992 | andrew.kuchling | 2008-01-16 01:32:03 +0100 (Wed, 16 Jan 2008) | 1 line
Docstring typos
........
r59993 | andrew.kuchling | 2008-01-16 04:17:25 +0100 (Wed, 16 Jan 2008) | 1 line
Add PEP 3141 section
........
r59998 | andrew.kuchling | 2008-01-16 14:01:51 +0100 (Wed, 16 Jan 2008) | 1 line
Markup fix
........
r59999 | georg.brandl | 2008-01-16 17:56:29 +0100 (Wed, 16 Jan 2008) | 2 lines
Fix MSDN library URL. (#1854)
........
r60006 | georg.brandl | 2008-01-16 21:27:56 +0100 (Wed, 16 Jan 2008) | 3 lines
Add Python-specific content to Doc dir. Update configuration file
to work with the newest Sphinx.
........
r60007 | georg.brandl | 2008-01-16 21:29:00 +0100 (Wed, 16 Jan 2008) | 2 lines
Doc build should work with 2.4 now.
........
r60009 | raymond.hettinger | 2008-01-17 00:38:16 +0100 (Thu, 17 Jan 2008) | 1 line
Minor wordsmithing.
........
r60010 | raymond.hettinger | 2008-01-17 00:40:45 +0100 (Thu, 17 Jan 2008) | 1 line
Add queues will alternative fetch orders (priority based and stack based).
........
r60011 | raymond.hettinger | 2008-01-17 00:49:35 +0100 (Thu, 17 Jan 2008) | 1 line
Add news entry.
........
r60013 | raymond.hettinger | 2008-01-17 04:02:14 +0100 (Thu, 17 Jan 2008) | 1 line
Make starmap() match its pure python definition and accept any itertable input (not just tuples).
........
r60015 | gregory.p.smith | 2008-01-17 08:43:20 +0100 (Thu, 17 Jan 2008) | 3 lines
Comply with RFC 3207.
Fixes issue 829951 - http://bugs.python.org/issue829951
........
r60018 | gregory.p.smith | 2008-01-17 09:03:17 +0100 (Thu, 17 Jan 2008) | 2 lines
entry for r60015
........
r60019 | raymond.hettinger | 2008-01-17 09:07:05 +0100 (Thu, 17 Jan 2008) | 1 line
Note versionadded.
........
r60020 | gregory.p.smith | 2008-01-17 09:35:49 +0100 (Thu, 17 Jan 2008) | 8 lines
Fixes (accepts patch) issue1339 - http://bugs.python.org/issue1339
- Factor out the duplication of EHLO/HELO in login() and sendmail() to
a new function, ehlo_or_helo_if_needed().
- Use ehlo_or_helo_if_needed() in starttls()
- Check for the starttls exception in starttls() in the same way as
login() checks for the auth extension.
Contributed by Bill Fenner.
........
r60021 | andrew.kuchling | 2008-01-17 13:00:15 +0100 (Thu, 17 Jan 2008) | 1 line
Revise 3141 section a bit; add some Windows items
........
r60022 | brett.cannon | 2008-01-17 19:45:10 +0100 (Thu, 17 Jan 2008) | 2 lines
Fix a function pointer declaration to silence the compiler.
........
r60024 | raymond.hettinger | 2008-01-17 20:31:38 +0100 (Thu, 17 Jan 2008) | 1 line
Issue #1861: Add read-only attribute listing upcoming events in the order they will be run.
........
r60025 | andrew.kuchling | 2008-01-17 20:49:24 +0100 (Thu, 17 Jan 2008) | 1 line
Correction from Jordan Lewis: halfdelay() uses tenths of a second, not milliseconds
........
r60026 | raymond.hettinger | 2008-01-17 23:27:49 +0100 (Thu, 17 Jan 2008) | 1 line
Add advice on choosing between scheduler and threading.Timer().
........
r60028 | christian.heimes | 2008-01-18 00:01:44 +0100 (Fri, 18 Jan 2008) | 2 lines
Updated new property syntax. An elaborate example for subclassing and the getter was missing.
Added comment about VS 2008 and PGO builds.
........
r60029 | raymond.hettinger | 2008-01-18 00:32:01 +0100 (Fri, 18 Jan 2008) | 1 line
Fix-up Timer() example.
........
r60030 | raymond.hettinger | 2008-01-18 00:56:56 +0100 (Fri, 18 Jan 2008) | 1 line
Fix markup
........
r60031 | raymond.hettinger | 2008-01-18 01:10:42 +0100 (Fri, 18 Jan 2008) | 1 line
clearcache() needs to remove the dict as well as clear it.
........
r60033 | andrew.kuchling | 2008-01-18 03:26:16 +0100 (Fri, 18 Jan 2008) | 1 line
Bump verson
........
r60034 | andrew.kuchling | 2008-01-18 03:42:52 +0100 (Fri, 18 Jan 2008) | 1 line
Typo fix
........
r60035 | christian.heimes | 2008-01-18 08:30:20 +0100 (Fri, 18 Jan 2008) | 3 lines
Coverity issue CID #197
var_decl: Declared variable "stm" without initializer
ninit_use_in_call: Using uninitialized value "stm" (field "stm".tm_zone uninitialized) in call to function "mktime"
........
r60036 | christian.heimes | 2008-01-18 08:45:30 +0100 (Fri, 18 Jan 2008) | 11 lines
Coverity issue CID #167
Event alloc_fn: Called allocation function "metacompile" [model]
Event var_assign: Assigned variable "gr" to storage returned from "metacompile"
gr = metacompile(n);
Event pass_arg: Variable "gr" not freed or pointed-to in function "maketables" [model]
g = maketables(gr);
translatelabels(g);
addfirstsets(g);
Event leaked_storage: Returned without freeing storage "gr"
return g;
........
r60038 | christian.heimes | 2008-01-18 09:04:57 +0100 (Fri, 18 Jan 2008) | 3 lines
Coverity issue CID #182
size_error: Allocating 1 bytes to pointer "children", which needs at least 4 bytes
........
r60041 | christian.heimes | 2008-01-18 09:47:59 +0100 (Fri, 18 Jan 2008) | 4 lines
Coverity issue CID #169
local_ptr_assign_local: Assigning address of stack variable "namebuf" to pointer "filename"
out_of_scope: Variable "namebuf" goes out of scope
use_invalid: Used "filename" pointing to out-of-scope variable "namebuf"
........
r60042 | christian.heimes | 2008-01-18 09:53:45 +0100 (Fri, 18 Jan 2008) | 2 lines
Coverity CID #168
leaked_storage: Returned without freeing storage "fp"
........
2008-01-18 05:56:22 -04:00
|
|
|
.. method:: SMTP.ehlo_or_helo_if_needed()
|
|
|
|
|
|
|
|
This method call :meth:`ehlo` and or :meth:`helo` if there has been no
|
|
|
|
previous ``EHLO`` or ``HELO`` command this session. It tries ESMTP ``EHLO``
|
|
|
|
first.
|
|
|
|
|
|
|
|
:exc:SMTPHeloError
|
|
|
|
The server didn't reply properly to the ``HELO`` greeting.
|
|
|
|
|
|
|
|
.. versionadded:: 2.6
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
.. method:: SMTP.has_extn(name)
|
|
|
|
|
|
|
|
Return :const:`True` if *name* is in the set of SMTP service extensions returned
|
|
|
|
by the server, :const:`False` otherwise. Case is ignored.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SMTP.verify(address)
|
|
|
|
|
|
|
|
Check the validity of an address on this server using SMTP ``VRFY``. Returns a
|
|
|
|
tuple consisting of code 250 and a full :rfc:`822` address (including human
|
|
|
|
name) if the user address is valid. Otherwise returns an SMTP error code of 400
|
|
|
|
or greater and an error string.
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
Many sites disable SMTP ``VRFY`` in order to foil spammers.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SMTP.login(user, password)
|
|
|
|
|
|
|
|
Log in on an SMTP server that requires authentication. The arguments are the
|
|
|
|
username and the password to authenticate with. If there has been no previous
|
|
|
|
``EHLO`` or ``HELO`` command this session, this method tries ESMTP ``EHLO``
|
|
|
|
first. This method will return normally if the authentication was successful, or
|
|
|
|
may raise the following exceptions:
|
|
|
|
|
|
|
|
:exc:`SMTPHeloError`
|
|
|
|
The server didn't reply properly to the ``HELO`` greeting.
|
|
|
|
|
|
|
|
:exc:`SMTPAuthenticationError`
|
|
|
|
The server didn't accept the username/password combination.
|
|
|
|
|
|
|
|
:exc:`SMTPException`
|
|
|
|
No suitable authentication method was found.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SMTP.starttls([keyfile[, certfile]])
|
|
|
|
|
|
|
|
Put the SMTP connection in TLS (Transport Layer Security) mode. All SMTP
|
|
|
|
commands that follow will be encrypted. You should then call :meth:`ehlo`
|
|
|
|
again.
|
|
|
|
|
|
|
|
If *keyfile* and *certfile* are provided, these are passed to the :mod:`socket`
|
|
|
|
module's :func:`ssl` function.
|
|
|
|
|
Merged revisions 59985-60000,60002,60005-60007,60009-60042 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r59987 | raymond.hettinger | 2008-01-15 21:52:42 +0100 (Tue, 15 Jan 2008) | 1 line
Refactor if/elif chain for clarity and speed. Remove dependency on subclasses having to implement _empty and _full.
........
r59988 | raymond.hettinger | 2008-01-15 22:22:47 +0100 (Tue, 15 Jan 2008) | 1 line
Fix-up half-written paragraph in the docs
........
r59989 | amaury.forgeotdarc | 2008-01-15 22:25:11 +0100 (Tue, 15 Jan 2008) | 3 lines
test_doctest fails since r59984.
Not sure if these are the correct values, but save_stdout has to be set before its usage...
........
r59992 | andrew.kuchling | 2008-01-16 01:32:03 +0100 (Wed, 16 Jan 2008) | 1 line
Docstring typos
........
r59993 | andrew.kuchling | 2008-01-16 04:17:25 +0100 (Wed, 16 Jan 2008) | 1 line
Add PEP 3141 section
........
r59998 | andrew.kuchling | 2008-01-16 14:01:51 +0100 (Wed, 16 Jan 2008) | 1 line
Markup fix
........
r59999 | georg.brandl | 2008-01-16 17:56:29 +0100 (Wed, 16 Jan 2008) | 2 lines
Fix MSDN library URL. (#1854)
........
r60006 | georg.brandl | 2008-01-16 21:27:56 +0100 (Wed, 16 Jan 2008) | 3 lines
Add Python-specific content to Doc dir. Update configuration file
to work with the newest Sphinx.
........
r60007 | georg.brandl | 2008-01-16 21:29:00 +0100 (Wed, 16 Jan 2008) | 2 lines
Doc build should work with 2.4 now.
........
r60009 | raymond.hettinger | 2008-01-17 00:38:16 +0100 (Thu, 17 Jan 2008) | 1 line
Minor wordsmithing.
........
r60010 | raymond.hettinger | 2008-01-17 00:40:45 +0100 (Thu, 17 Jan 2008) | 1 line
Add queues will alternative fetch orders (priority based and stack based).
........
r60011 | raymond.hettinger | 2008-01-17 00:49:35 +0100 (Thu, 17 Jan 2008) | 1 line
Add news entry.
........
r60013 | raymond.hettinger | 2008-01-17 04:02:14 +0100 (Thu, 17 Jan 2008) | 1 line
Make starmap() match its pure python definition and accept any itertable input (not just tuples).
........
r60015 | gregory.p.smith | 2008-01-17 08:43:20 +0100 (Thu, 17 Jan 2008) | 3 lines
Comply with RFC 3207.
Fixes issue 829951 - http://bugs.python.org/issue829951
........
r60018 | gregory.p.smith | 2008-01-17 09:03:17 +0100 (Thu, 17 Jan 2008) | 2 lines
entry for r60015
........
r60019 | raymond.hettinger | 2008-01-17 09:07:05 +0100 (Thu, 17 Jan 2008) | 1 line
Note versionadded.
........
r60020 | gregory.p.smith | 2008-01-17 09:35:49 +0100 (Thu, 17 Jan 2008) | 8 lines
Fixes (accepts patch) issue1339 - http://bugs.python.org/issue1339
- Factor out the duplication of EHLO/HELO in login() and sendmail() to
a new function, ehlo_or_helo_if_needed().
- Use ehlo_or_helo_if_needed() in starttls()
- Check for the starttls exception in starttls() in the same way as
login() checks for the auth extension.
Contributed by Bill Fenner.
........
r60021 | andrew.kuchling | 2008-01-17 13:00:15 +0100 (Thu, 17 Jan 2008) | 1 line
Revise 3141 section a bit; add some Windows items
........
r60022 | brett.cannon | 2008-01-17 19:45:10 +0100 (Thu, 17 Jan 2008) | 2 lines
Fix a function pointer declaration to silence the compiler.
........
r60024 | raymond.hettinger | 2008-01-17 20:31:38 +0100 (Thu, 17 Jan 2008) | 1 line
Issue #1861: Add read-only attribute listing upcoming events in the order they will be run.
........
r60025 | andrew.kuchling | 2008-01-17 20:49:24 +0100 (Thu, 17 Jan 2008) | 1 line
Correction from Jordan Lewis: halfdelay() uses tenths of a second, not milliseconds
........
r60026 | raymond.hettinger | 2008-01-17 23:27:49 +0100 (Thu, 17 Jan 2008) | 1 line
Add advice on choosing between scheduler and threading.Timer().
........
r60028 | christian.heimes | 2008-01-18 00:01:44 +0100 (Fri, 18 Jan 2008) | 2 lines
Updated new property syntax. An elaborate example for subclassing and the getter was missing.
Added comment about VS 2008 and PGO builds.
........
r60029 | raymond.hettinger | 2008-01-18 00:32:01 +0100 (Fri, 18 Jan 2008) | 1 line
Fix-up Timer() example.
........
r60030 | raymond.hettinger | 2008-01-18 00:56:56 +0100 (Fri, 18 Jan 2008) | 1 line
Fix markup
........
r60031 | raymond.hettinger | 2008-01-18 01:10:42 +0100 (Fri, 18 Jan 2008) | 1 line
clearcache() needs to remove the dict as well as clear it.
........
r60033 | andrew.kuchling | 2008-01-18 03:26:16 +0100 (Fri, 18 Jan 2008) | 1 line
Bump verson
........
r60034 | andrew.kuchling | 2008-01-18 03:42:52 +0100 (Fri, 18 Jan 2008) | 1 line
Typo fix
........
r60035 | christian.heimes | 2008-01-18 08:30:20 +0100 (Fri, 18 Jan 2008) | 3 lines
Coverity issue CID #197
var_decl: Declared variable "stm" without initializer
ninit_use_in_call: Using uninitialized value "stm" (field "stm".tm_zone uninitialized) in call to function "mktime"
........
r60036 | christian.heimes | 2008-01-18 08:45:30 +0100 (Fri, 18 Jan 2008) | 11 lines
Coverity issue CID #167
Event alloc_fn: Called allocation function "metacompile" [model]
Event var_assign: Assigned variable "gr" to storage returned from "metacompile"
gr = metacompile(n);
Event pass_arg: Variable "gr" not freed or pointed-to in function "maketables" [model]
g = maketables(gr);
translatelabels(g);
addfirstsets(g);
Event leaked_storage: Returned without freeing storage "gr"
return g;
........
r60038 | christian.heimes | 2008-01-18 09:04:57 +0100 (Fri, 18 Jan 2008) | 3 lines
Coverity issue CID #182
size_error: Allocating 1 bytes to pointer "children", which needs at least 4 bytes
........
r60041 | christian.heimes | 2008-01-18 09:47:59 +0100 (Fri, 18 Jan 2008) | 4 lines
Coverity issue CID #169
local_ptr_assign_local: Assigning address of stack variable "namebuf" to pointer "filename"
out_of_scope: Variable "namebuf" goes out of scope
use_invalid: Used "filename" pointing to out-of-scope variable "namebuf"
........
r60042 | christian.heimes | 2008-01-18 09:53:45 +0100 (Fri, 18 Jan 2008) | 2 lines
Coverity CID #168
leaked_storage: Returned without freeing storage "fp"
........
2008-01-18 05:56:22 -04:00
|
|
|
If there has been no previous ``EHLO`` or ``HELO`` command this session,
|
|
|
|
this method tries ESMTP ``EHLO`` first.
|
|
|
|
|
|
|
|
.. versionchanged:: 2.6
|
|
|
|
|
|
|
|
:exc:`SMTPHeloError`
|
|
|
|
The server didn't reply properly to the ``HELO`` greeting.
|
|
|
|
|
|
|
|
:exc:`SMTPException`
|
|
|
|
The server does not support the STARTTLS extension.
|
|
|
|
|
|
|
|
.. versionchanged:: 2.6
|
|
|
|
|
|
|
|
:exc:`RuntimeError`
|
|
|
|
SSL/TLS support is not available to your python interpreter.
|
|
|
|
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
.. method:: SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
|
|
|
|
|
|
|
|
Send mail. The required arguments are an :rfc:`822` from-address string, a list
|
|
|
|
of :rfc:`822` to-address strings (a bare string will be treated as a list with 1
|
|
|
|
address), and a message string. The caller may pass a list of ESMTP options
|
|
|
|
(such as ``8bitmime``) to be used in ``MAIL FROM`` commands as *mail_options*.
|
|
|
|
ESMTP options (such as ``DSN`` commands) that should be used with all ``RCPT``
|
|
|
|
commands can be passed as *rcpt_options*. (If you need to use different ESMTP
|
|
|
|
options to different recipients you have to use the low-level methods such as
|
|
|
|
:meth:`mail`, :meth:`rcpt` and :meth:`data` to send the message.)
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
The *from_addr* and *to_addrs* parameters are used to construct the message
|
|
|
|
envelope used by the transport agents. The :class:`SMTP` does not modify the
|
|
|
|
message headers in any way.
|
|
|
|
|
|
|
|
If there has been no previous ``EHLO`` or ``HELO`` command this session, this
|
|
|
|
method tries ESMTP ``EHLO`` first. If the server does ESMTP, message size and
|
|
|
|
each of the specified options will be passed to it (if the option is in the
|
|
|
|
feature set the server advertises). If ``EHLO`` fails, ``HELO`` will be tried
|
|
|
|
and ESMTP options suppressed.
|
|
|
|
|
|
|
|
This method will return normally if the mail is accepted for at least one
|
|
|
|
recipient. Otherwise it will throw an exception. That is, if this method does
|
|
|
|
not throw an exception, then someone should get your mail. If this method does
|
|
|
|
not throw an exception, it returns a dictionary, with one entry for each
|
|
|
|
recipient that was refused. Each entry contains a tuple of the SMTP error code
|
|
|
|
and the accompanying error message sent by the server.
|
|
|
|
|
|
|
|
This method may raise the following exceptions:
|
|
|
|
|
|
|
|
:exc:`SMTPRecipientsRefused`
|
|
|
|
All recipients were refused. Nobody got the mail. The :attr:`recipients`
|
|
|
|
attribute of the exception object is a dictionary with information about the
|
|
|
|
refused recipients (like the one returned when at least one recipient was
|
|
|
|
accepted).
|
|
|
|
|
|
|
|
:exc:`SMTPHeloError`
|
|
|
|
The server didn't reply properly to the ``HELO`` greeting.
|
|
|
|
|
|
|
|
:exc:`SMTPSenderRefused`
|
|
|
|
The server didn't accept the *from_addr*.
|
|
|
|
|
|
|
|
:exc:`SMTPDataError`
|
|
|
|
The server replied with an unexpected error code (other than a refusal of a
|
|
|
|
recipient).
|
|
|
|
|
|
|
|
Unless otherwise noted, the connection will be open even after an exception is
|
|
|
|
raised.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: SMTP.quit()
|
|
|
|
|
|
|
|
Terminate the SMTP session and close the connection.
|
|
|
|
|
|
|
|
Low-level methods corresponding to the standard SMTP/ESMTP commands ``HELP``,
|
|
|
|
``RSET``, ``NOOP``, ``MAIL``, ``RCPT``, and ``DATA`` are also supported.
|
|
|
|
Normally these do not need to be called directly, so they are not documented
|
|
|
|
here. For details, consult the module code.
|
|
|
|
|
|
|
|
|
|
|
|
.. _smtp-example:
|
|
|
|
|
|
|
|
SMTP Example
|
|
|
|
------------
|
|
|
|
|
|
|
|
This example prompts the user for addresses needed in the message envelope ('To'
|
|
|
|
and 'From' addresses), and the message to be delivered. Note that the headers
|
|
|
|
to be included with the message must be included in the message as entered; this
|
|
|
|
example doesn't do any processing of the :rfc:`822` headers. In particular, the
|
|
|
|
'To' and 'From' addresses must be included in the message headers explicitly. ::
|
|
|
|
|
|
|
|
import smtplib
|
|
|
|
|
|
|
|
def prompt(prompt):
|
2007-12-02 18:48:17 -04:00
|
|
|
return input(prompt).strip()
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
fromaddr = prompt("From: ")
|
|
|
|
toaddrs = prompt("To: ").split()
|
2007-09-04 04:15:32 -03:00
|
|
|
print("Enter message, end with ^D (Unix) or ^Z (Windows):")
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
# Add the From: and To: headers at the start!
|
|
|
|
msg = ("From: %s\r\nTo: %s\r\n\r\n"
|
|
|
|
% (fromaddr, ", ".join(toaddrs)))
|
2007-09-09 21:49:57 -03:00
|
|
|
while True:
|
2007-08-15 11:28:22 -03:00
|
|
|
try:
|
2007-12-02 18:48:17 -04:00
|
|
|
line = input()
|
2007-08-15 11:28:22 -03:00
|
|
|
except EOFError:
|
|
|
|
break
|
|
|
|
if not line:
|
|
|
|
break
|
|
|
|
msg = msg + line
|
|
|
|
|
2007-09-04 04:15:32 -03:00
|
|
|
print("Message length is", len(msg))
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
server = smtplib.SMTP('localhost')
|
|
|
|
server.set_debuglevel(1)
|
|
|
|
server.sendmail(fromaddr, toaddrs, msg)
|
|
|
|
server.quit()
|
|
|
|
|