blob: 526b4a14a939deebf020eaa722ed7fb4e3e37d46 [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{smtplib} ---
Fred Drake79936fe1999-04-22 17:23:34 +00002 SMTP protocol client}
Fred Drakeb91e9341998-07-23 17:59:49 +00003
Fred Drake79936fe1999-04-22 17:23:34 +00004\declaremodule{standard}{smtplib}
Fred Drakeb91e9341998-07-23 17:59:49 +00005\modulesynopsis{SMTP protocol client (requires sockets).}
Fred Drake79936fe1999-04-22 17:23:34 +00006\sectionauthor{Eric S. Raymond}{esr@snark.thyrsus.com}
Fred Drakeb91e9341998-07-23 17:59:49 +00007
Fred Drake3240dd21998-07-01 14:10:52 +00008\indexii{SMTP}{protocol}
9\index{Simple Mail Transfer Protocol}
Guido van Rossum8668e8e1998-06-28 17:55:53 +000010
Fred Drake3240dd21998-07-01 14:10:52 +000011The \module{smtplib} module defines an SMTP client session object that
12can be used to send mail to any Internet machine with an SMTP or ESMTP
Fred Drake5b683621998-06-30 16:53:52 +000013listener daemon. For details of SMTP and ESMTP operation, consult
Fred Drakeebe03411999-11-09 20:11:17 +000014\rfc{821} (\citetitle{Simple Mail Transfer Protocol}) and \rfc{1869}
15(\citetitle{SMTP Service Extensions}).
Guido van Rossum8668e8e1998-06-28 17:55:53 +000016
Fred Drake3240dd21998-07-01 14:10:52 +000017\begin{classdesc}{SMTP}{\optional{host\optional{, port}}}
Guido van Rossum8668e8e1998-06-28 17:55:53 +000018A \class{SMTP} instance encapsulates an SMTP connection. It has
19methods that support a full repertoire of SMTP and ESMTP
20operations. If the optional host and port parameters are given, the
Fred Drake5b683621998-06-30 16:53:52 +000021SMTP \method{connect()} method is called with those parameters during
Guido van Rossum7969f311999-04-07 15:56:51 +000022initialization. An \exception{SMTPConnectError} is raised if the
23specified host doesn't respond correctly.
Guido van Rossum8668e8e1998-06-28 17:55:53 +000024
25For normal use, you should only require the initialization/connect,
Guido van Rossum7969f311999-04-07 15:56:51 +000026\method{sendmail()}, and \method{quit()} methods. An example is
Fred Drake5b683621998-06-30 16:53:52 +000027included below.
Guido van Rossum8668e8e1998-06-28 17:55:53 +000028\end{classdesc}
29
Fred Drake3240dd21998-07-01 14:10:52 +000030
Fred Drake79936fe1999-04-22 17:23:34 +000031A nice selection of exceptions is defined as well:
32
33\begin{excdesc}{SMTPException}
34 Base exception class for all exceptions raised by this module.
35\end{excdesc}
36
37\begin{excdesc}{SMTPServerDisconnected}
38 This exception is raised when the server unexpectedly disconnects,
39 or when an attempt is made to use the \class{SMTP} instance before
40 connecting it to a server.
41\end{excdesc}
42
43\begin{excdesc}{SMTPResponseException}
44 Base class for all exceptions that include an SMTP error code.
45 These exceptions are generated in some instances when the SMTP
46 server returns an error code. The error code is stored in the
47 \member{smtp_code} attribute of the error, and the
48 \member{smtp_error} attribute is set to the error message.
49\end{excdesc}
50
51\begin{excdesc}{SMTPSenderRefused}
52 Sender address refused. In addition to the attributes set by on all
53 \exception{SMTPResponseException} exceptions, this sets `sender' to
54 the string that the SMTP server refused.
55\end{excdesc}
56
57\begin{excdesc}{SMTPRecipientsRefused}
58 All recipient addresses refused. The errors for each recipient are
Thomas Woutersf8316632000-07-16 19:01:10 +000059 accessible through the attribute \member{recipients}, which is a
Fred Drake79936fe1999-04-22 17:23:34 +000060 dictionary of exactly the same sort as \method{SMTP.sendmail()}
61 returns.
62\end{excdesc}
63
64\begin{excdesc}{SMTPDataError}
65 The SMTP server refused to accept the message data.
66\end{excdesc}
67
68\begin{excdesc}{SMTPConnectError}
69 Error occurred during establishment of a connection with the server.
70\end{excdesc}
71
72\begin{excdesc}{SMTPHeloError}
73 The server refused our \samp{HELO} message.
74\end{excdesc}
75
76
Fred Drake38e5d272000-04-03 20:13:55 +000077\begin{seealso}
Fred Drake58a2dff2000-10-03 05:56:55 +000078 \seerfc{821}{Simple Mail Transfer Protocol}{Protocol definition for
79 SMTP. This document covers the model, operating procedure,
80 and protocol details for SMTP.}
81 \seerfc{1869}{SMTP Service Extensions}{Definition of the ESMTP
82 extensions for SMTP. This describes a framework for
83 extending SMTP with new commands, supporting dynamic
84 discovery of the commands provided by the server, and
85 defines a few additional commands.}
Fred Drake38e5d272000-04-03 20:13:55 +000086\end{seealso}
87
88
Fred Drake79936fe1999-04-22 17:23:34 +000089\subsection{SMTP Objects \label{SMTP-objects}}
Guido van Rossum8668e8e1998-06-28 17:55:53 +000090
Fred Drake5b683621998-06-30 16:53:52 +000091An \class{SMTP} instance has the following methods:
Guido van Rossum8668e8e1998-06-28 17:55:53 +000092
93\begin{methoddesc}{set_debuglevel}{level}
Fred Drake5b683621998-06-30 16:53:52 +000094Set the debug output level. A true value for \var{level} results in
95debug messages for connection and for all messages sent to and
96received from the server.
Guido van Rossum8668e8e1998-06-28 17:55:53 +000097\end{methoddesc}
98
Fred Drake3240dd21998-07-01 14:10:52 +000099\begin{methoddesc}{connect}{\optional{host\optional{, port}}}
100Connect to a host on a given port. The defaults are to connect to the
101local host at the standard SMTP port (25).
Fred Drake5b683621998-06-30 16:53:52 +0000102If the hostname ends with a colon (\character{:}) followed by a
103number, that suffix will be stripped off and the number interpreted as
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000104the port number to use.
Fred Drake0aa811c2001-10-20 04:24:09 +0000105This method is automatically invoked by the constructor if a
Fred Drake5b683621998-06-30 16:53:52 +0000106host is specified during instantiation.
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000107\end{methoddesc}
108
109\begin{methoddesc}{docmd}{cmd, \optional{, argstring}}
Fred Drake5b683621998-06-30 16:53:52 +0000110Send a command \var{cmd} to the server. The optional argument
111\var{argstring} is simply concatenated to the command, separated by a
112space.
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000113
Fred Drake5b683621998-06-30 16:53:52 +0000114This returns a 2-tuple composed of a numeric response code and the
115actual response line (multiline responses are joined into one long
116line.)
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000117
118In normal operation it should not be necessary to call this method
119explicitly. It is used to implement other methods and may be useful
120for testing private extensions.
Guido van Rossum7969f311999-04-07 15:56:51 +0000121
Fred Drake79936fe1999-04-22 17:23:34 +0000122If the connection to the server is lost while waiting for the reply,
123\exception{SMTPServerDisconnected} will be raised.
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000124\end{methoddesc}
125
126\begin{methoddesc}{helo}{\optional{hostname}}
Fred Drake3240dd21998-07-01 14:10:52 +0000127Identify yourself to the SMTP server using \samp{HELO}. The hostname
128argument defaults to the fully qualified domain name of the local
129host.
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000130
131In normal operation it should not be necessary to call this method
Fred Drake5b683621998-06-30 16:53:52 +0000132explicitly. It will be implicitly called by the \method{sendmail()}
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000133when necessary.
134\end{methoddesc}
135
136\begin{methoddesc}{ehlo}{\optional{hostname}}
Guido van Rossum7969f311999-04-07 15:56:51 +0000137Identify yourself to an ESMTP server using \samp{EHLO}. The hostname
Fred Drake3240dd21998-07-01 14:10:52 +0000138argument defaults to the fully qualified domain name of the local
139host. Examine the response for ESMTP option and store them for use by
Fred Drake5b683621998-06-30 16:53:52 +0000140\method{has_option()}.
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000141
Fred Drake5b683621998-06-30 16:53:52 +0000142Unless you wish to use \method{has_option()} before sending
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000143mail, it should not be necessary to call this method explicitly. It
Fred Drake5b683621998-06-30 16:53:52 +0000144will be implicitly called by \method{sendmail()} when necessary.
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000145\end{methoddesc}
146
Guido van Rossum7969f311999-04-07 15:56:51 +0000147\begin{methoddesc}{has_extn}{name}
Fred Drake79936fe1999-04-22 17:23:34 +0000148Return \code{1} if \var{name} is in the set of SMTP service extensions
149returned by the server, \code{0} otherwise. Case is ignored.
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000150\end{methoddesc}
151
152\begin{methoddesc}{verify}{address}
Fred Drake3240dd21998-07-01 14:10:52 +0000153Check the validity of an address on this server using SMTP \samp{VRFY}.
Fred Drake5b683621998-06-30 16:53:52 +0000154Returns a tuple consisting of code 250 and a full \rfc{822} address
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000155(including human name) if the user address is valid. Otherwise returns
156an SMTP error code of 400 or greater and an error string.
157
Fred Drake0aa811c2001-10-20 04:24:09 +0000158\note{Many sites disable SMTP \samp{VRFY} in order to foil spammers.}
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000159\end{methoddesc}
160
Fred Drakeaae8da12001-09-11 16:58:00 +0000161\begin{methoddesc}{login}{user, password}
162Log in on an SMTP server that requires authentication.
163The arguments are the username and the password to authenticate with.
164If there has been no previous \samp{EHLO} or \samp{HELO} command this
165session, this method tries ESMTP \samp{EHLO} first.
166This method will return normally if the authentication was successful,
167or may raise the following exceptions:
168
169\begin{description}
170 \item[\exception{SMTPHeloError}]
171 The server didn't reply properly to the \samp{HELO} greeting.
172 \item[\exception{SMTPAuthenticationError}]
173 The server didn't accept the username/password combination.
174 \item[\exception{SMTPError}]
175 No suitable authentication method was found.
176\end{description}
177\end{methoddesc}
178
Fred Drakef2a5f3f2001-09-14 17:48:41 +0000179\begin{methoddesc}{starttls}{\optional{keyfile\optional{, certfile}}}
180Put the SMTP connection in TLS (Transport Layer Security) mode. All
181SMTP commands that follow will be encrypted. You should then call
182\method{ehlo()} again.
Guido van Rossumf7fcf5e2001-09-14 16:08:44 +0000183
Fred Drakef2a5f3f2001-09-14 17:48:41 +0000184If \var{keyfile} and \var{certfile} are provided, these are passed to
185the \refmodule{socket} module's \function{ssl()} function.
Guido van Rossumf7fcf5e2001-09-14 16:08:44 +0000186\end{methoddesc}
187
Guido van Rossum7969f311999-04-07 15:56:51 +0000188\begin{methoddesc}{sendmail}{from_addr, to_addrs, msg\optional{,
Fred Drake79936fe1999-04-22 17:23:34 +0000189 mail_options, rcpt_options}}
Fred Drake3240dd21998-07-01 14:10:52 +0000190Send mail. The required arguments are an \rfc{822} from-address
191string, a list of \rfc{822} to-address strings, and a message string.
Guido van Rossum7969f311999-04-07 15:56:51 +0000192The caller may pass a list of ESMTP options (such as \samp{8bitmime})
193to be used in \samp{MAIL FROM} commands as \var{mail_options}. ESMTP
194options (such as \samp{DSN} commands) that should be used with all
195\samp{RCPT} commands can be passed as \var{rcpt_options}. (If you
196need to use different ESMTP options to different recipients you have
197to use the low-level methods such as \method{mail}, \method{rcpt} and
198\method{data} to send the message.)
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000199
Fred Drake0aa811c2001-10-20 04:24:09 +0000200\note{The \var{from_addr} and \var{to_addrs} parameters are
Fred Drake38e5d272000-04-03 20:13:55 +0000201used to construct the message envelope used by the transport agents.
Fred Drake0aa811c2001-10-20 04:24:09 +0000202The \class{SMTP} does not modify the message headers in any way.}
Fred Drake38e5d272000-04-03 20:13:55 +0000203
Fred Drake3240dd21998-07-01 14:10:52 +0000204If there has been no previous \samp{EHLO} or \samp{HELO} command this
205session, this method tries ESMTP \samp{EHLO} first. If the server does
206ESMTP, message size and each of the specified options will be passed
207to it (if the option is in the feature set the server advertises). If
208\samp{EHLO} fails, \samp{HELO} will be tried and ESMTP options
209suppressed.
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000210
Guido van Rossum7969f311999-04-07 15:56:51 +0000211This method will return normally if the mail is accepted for at least
212one recipient. Otherwise it will throw an exception. That is, if this
213method does not throw an exception, then someone should get your mail.
214If this method does not throw an exception, it returns a dictionary,
215with one entry for each recipient that was refused. Each entry
216contains a tuple of the SMTP error code and the accompanying error
217message sent by the server.
218
219This method may raise the following exceptions:
220
Fred Drake38e5d272000-04-03 20:13:55 +0000221\begin{description}
Fred Drake79936fe1999-04-22 17:23:34 +0000222\item[\exception{SMTPRecipientsRefused}]
Guido van Rossum7969f311999-04-07 15:56:51 +0000223All recipients were refused. Nobody got the mail. The
Fred Drake38e5d272000-04-03 20:13:55 +0000224\member{recipients} attribute of the exception object is a dictionary
Guido van Rossum7969f311999-04-07 15:56:51 +0000225with information about the refused recipients (like the one returned
226when at least one recipient was accepted).
227
Fred Drake79936fe1999-04-22 17:23:34 +0000228\item[\exception{SMTPHeloError}]
Fred Drake38e5d272000-04-03 20:13:55 +0000229The server didn't reply properly to the \samp{HELO} greeting.
Guido van Rossum7969f311999-04-07 15:56:51 +0000230
Fred Drake79936fe1999-04-22 17:23:34 +0000231\item[\exception{SMTPSenderRefused}]
Fred Drake38e5d272000-04-03 20:13:55 +0000232The server didn't accept the \var{from_addr}.
Guido van Rossum7969f311999-04-07 15:56:51 +0000233
Fred Drake79936fe1999-04-22 17:23:34 +0000234\item[\exception{SMTPDataError}]
Fred Drake38e5d272000-04-03 20:13:55 +0000235The server replied with an unexpected error code (other than a refusal
236of a recipient).
237\end{description}
Guido van Rossum7969f311999-04-07 15:56:51 +0000238
Fred Drake38e5d272000-04-03 20:13:55 +0000239Unless otherwise noted, the connection will be open even after
Guido van Rossum7969f311999-04-07 15:56:51 +0000240an exception is raised.
241
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000242\end{methoddesc}
243
244\begin{methoddesc}{quit}{}
245Terminate the SMTP session and close the connection.
246\end{methoddesc}
247
248Low-level methods corresponding to the standard SMTP/ESMTP commands
Fred Drake3240dd21998-07-01 14:10:52 +0000249\samp{HELP}, \samp{RSET}, \samp{NOOP}, \samp{MAIL}, \samp{RCPT}, and
250\samp{DATA} are also supported. Normally these do not need to be
251called directly, so they are not documented here. For details,
252consult the module code.
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000253
Fred Drake5b683621998-06-30 16:53:52 +0000254
Fred Drake60c3caf1998-08-07 16:03:32 +0000255\subsection{SMTP Example \label{SMTP-example}}
Fred Drake5b683621998-06-30 16:53:52 +0000256
Fred Drake7be0cde1998-12-22 18:04:48 +0000257This example prompts the user for addresses needed in the message
Fred Drake38e5d272000-04-03 20:13:55 +0000258envelope (`To' and `From' addresses), and the message to be
Fred Drake7be0cde1998-12-22 18:04:48 +0000259delivered. Note that the headers to be included with the message must
260be included in the message as entered; this example doesn't do any
261processing of the \rfc{822} headers. In particular, the `To' and
262`From' addresses must be included in the message headers explicitly.
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000263
264\begin{verbatim}
Fred Drakef6c59e81998-11-30 15:07:26 +0000265import smtplib
Fred Drake38e5d272000-04-03 20:13:55 +0000266import string
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000267
Fred Drake5b683621998-06-30 16:53:52 +0000268def prompt(prompt):
Fred Drakee9719fe2001-05-20 12:26:04 +0000269 return raw_input(prompt).strip()
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000270
Fred Drake38e5d272000-04-03 20:13:55 +0000271fromaddr = prompt("From: ")
Fred Drakee9719fe2001-05-20 12:26:04 +0000272toaddrs = prompt("To: ").split()
Fred Drake5b683621998-06-30 16:53:52 +0000273print "Enter message, end with ^D:"
Fred Drake38e5d272000-04-03 20:13:55 +0000274
275# Add the From: and To: headers at the start!
276msg = ("From: %s\r\nTo: %s\r\n\r\n"
277 % (fromaddr, string.join(toaddrs, ", ")))
Fred Drake5b683621998-06-30 16:53:52 +0000278while 1:
Fred Drakee9719fe2001-05-20 12:26:04 +0000279 try:
280 line = raw_input()
281 except EOFError:
282 break
Fred Drake5b683621998-06-30 16:53:52 +0000283 if not line:
284 break
285 msg = msg + line
Fred Drake38e5d272000-04-03 20:13:55 +0000286
Fred Drake5b683621998-06-30 16:53:52 +0000287print "Message length is " + `len(msg)`
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000288
Fred Drakef6c59e81998-11-30 15:07:26 +0000289server = smtplib.SMTP('localhost')
Fred Drake5b683621998-06-30 16:53:52 +0000290server.set_debuglevel(1)
291server.sendmail(fromaddr, toaddrs, msg)
292server.quit()
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000293\end{verbatim}