source: vendor/python/2.5/Doc/lib/libsmtplib.tex

Last change on this file was 3225, checked in by bird, 18 years ago

Python 2.5

File size: 11.0 KB
Line 
1\section{\module{smtplib} ---
2 SMTP protocol client}
3
4\declaremodule{standard}{smtplib}
5\modulesynopsis{SMTP protocol client (requires sockets).}
6\sectionauthor{Eric S. Raymond}{esr@snark.thyrsus.com}
7
8\indexii{SMTP}{protocol}
9\index{Simple Mail Transfer Protocol}
10
11The \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
13listener daemon. For details of SMTP and ESMTP operation, consult
14\rfc{821} (\citetitle{Simple Mail Transfer Protocol}) and \rfc{1869}
15(\citetitle{SMTP Service Extensions}).
16
17\begin{classdesc}{SMTP}{\optional{host\optional{, port\optional{,
18 local_hostname}}}}
19A \class{SMTP} instance encapsulates an SMTP connection. It has
20methods that support a full repertoire of SMTP and ESMTP
21operations. If the optional host and port parameters are given, the
22SMTP \method{connect()} method is called with those parameters during
23initialization. An \exception{SMTPConnectError} is raised if the
24specified host doesn't respond correctly.
25
26For normal use, you should only require the initialization/connect,
27\method{sendmail()}, and \method{quit()} methods. An example is
28included below.
29\end{classdesc}
30
31
32A nice selection of exceptions is defined as well:
33
34\begin{excdesc}{SMTPException}
35 Base exception class for all exceptions raised by this module.
36\end{excdesc}
37
38\begin{excdesc}{SMTPServerDisconnected}
39 This exception is raised when the server unexpectedly disconnects,
40 or when an attempt is made to use the \class{SMTP} instance before
41 connecting it to a server.
42\end{excdesc}
43
44\begin{excdesc}{SMTPResponseException}
45 Base class for all exceptions that include an SMTP error code.
46 These exceptions are generated in some instances when the SMTP
47 server returns an error code. The error code is stored in the
48 \member{smtp_code} attribute of the error, and the
49 \member{smtp_error} attribute is set to the error message.
50\end{excdesc}
51
52\begin{excdesc}{SMTPSenderRefused}
53 Sender address refused. In addition to the attributes set by on all
54 \exception{SMTPResponseException} exceptions, this sets `sender' to
55 the string that the SMTP server refused.
56\end{excdesc}
57
58\begin{excdesc}{SMTPRecipientsRefused}
59 All recipient addresses refused. The errors for each recipient are
60 accessible through the attribute \member{recipients}, which is a
61 dictionary of exactly the same sort as \method{SMTP.sendmail()}
62 returns.
63\end{excdesc}
64
65\begin{excdesc}{SMTPDataError}
66 The SMTP server refused to accept the message data.
67\end{excdesc}
68
69\begin{excdesc}{SMTPConnectError}
70 Error occurred during establishment of a connection with the server.
71\end{excdesc}
72
73\begin{excdesc}{SMTPHeloError}
74 The server refused our \samp{HELO} message.
75\end{excdesc}
76
77
78\begin{seealso}
79 \seerfc{821}{Simple Mail Transfer Protocol}{Protocol definition for
80 SMTP. This document covers the model, operating procedure,
81 and protocol details for SMTP.}
82 \seerfc{1869}{SMTP Service Extensions}{Definition of the ESMTP
83 extensions for SMTP. This describes a framework for
84 extending SMTP with new commands, supporting dynamic
85 discovery of the commands provided by the server, and
86 defines a few additional commands.}
87\end{seealso}
88
89
90\subsection{SMTP Objects \label{SMTP-objects}}
91
92An \class{SMTP} instance has the following methods:
93
94\begin{methoddesc}{set_debuglevel}{level}
95Set the debug output level. A true value for \var{level} results in
96debug messages for connection and for all messages sent to and
97received from the server.
98\end{methoddesc}
99
100\begin{methoddesc}{connect}{\optional{host\optional{, port}}}
101Connect to a host on a given port. The defaults are to connect to the
102local host at the standard SMTP port (25).
103If the hostname ends with a colon (\character{:}) followed by a
104number, that suffix will be stripped off and the number interpreted as
105the port number to use.
106This method is automatically invoked by the constructor if a
107host is specified during instantiation.
108\end{methoddesc}
109
110\begin{methoddesc}{docmd}{cmd, \optional{, argstring}}
111Send a command \var{cmd} to the server. The optional argument
112\var{argstring} is simply concatenated to the command, separated by a
113space.
114
115This returns a 2-tuple composed of a numeric response code and the
116actual response line (multiline responses are joined into one long
117line.)
118
119In normal operation it should not be necessary to call this method
120explicitly. It is used to implement other methods and may be useful
121for testing private extensions.
122
123If the connection to the server is lost while waiting for the reply,
124\exception{SMTPServerDisconnected} will be raised.
125\end{methoddesc}
126
127\begin{methoddesc}{helo}{\optional{hostname}}
128Identify yourself to the SMTP server using \samp{HELO}. The hostname
129argument defaults to the fully qualified domain name of the local
130host.
131
132In normal operation it should not be necessary to call this method
133explicitly. It will be implicitly called by the \method{sendmail()}
134when necessary.
135\end{methoddesc}
136
137\begin{methoddesc}{ehlo}{\optional{hostname}}
138Identify yourself to an ESMTP server using \samp{EHLO}. The hostname
139argument defaults to the fully qualified domain name of the local
140host. Examine the response for ESMTP option and store them for use by
141\method{has_extn()}.
142
143Unless you wish to use \method{has_extn()} before sending
144mail, it should not be necessary to call this method explicitly. It
145will be implicitly called by \method{sendmail()} when necessary.
146\end{methoddesc}
147
148\begin{methoddesc}{has_extn}{name}
149Return \constant{True} if \var{name} is in the set of SMTP service
150extensions returned by the server, \constant{False} otherwise.
151Case is ignored.
152\end{methoddesc}
153
154\begin{methoddesc}{verify}{address}
155Check the validity of an address on this server using SMTP \samp{VRFY}.
156Returns a tuple consisting of code 250 and a full \rfc{822} address
157(including human name) if the user address is valid. Otherwise returns
158an SMTP error code of 400 or greater and an error string.
159
160\note{Many sites disable SMTP \samp{VRFY} in order to foil spammers.}
161\end{methoddesc}
162
163\begin{methoddesc}{login}{user, password}
164Log in on an SMTP server that requires authentication.
165The arguments are the username and the password to authenticate with.
166If there has been no previous \samp{EHLO} or \samp{HELO} command this
167session, this method tries ESMTP \samp{EHLO} first.
168This method will return normally if the authentication was successful,
169or may raise the following exceptions:
170
171\begin{description}
172 \item[\exception{SMTPHeloError}]
173 The server didn't reply properly to the \samp{HELO} greeting.
174 \item[\exception{SMTPAuthenticationError}]
175 The server didn't accept the username/password combination.
176 \item[\exception{SMTPError}]
177 No suitable authentication method was found.
178\end{description}
179\end{methoddesc}
180
181\begin{methoddesc}{starttls}{\optional{keyfile\optional{, certfile}}}
182Put the SMTP connection in TLS (Transport Layer Security) mode. All
183SMTP commands that follow will be encrypted. You should then call
184\method{ehlo()} again.
185
186If \var{keyfile} and \var{certfile} are provided, these are passed to
187the \refmodule{socket} module's \function{ssl()} function.
188\end{methoddesc}
189
190\begin{methoddesc}{sendmail}{from_addr, to_addrs, msg\optional{,
191 mail_options, rcpt_options}}
192Send mail. The required arguments are an \rfc{822} from-address
193string, a list of \rfc{822} to-address strings (a bare string will be
194treated as a list with 1 address), and a message string. The caller
195may pass a list of ESMTP options (such as \samp{8bitmime}) to be used
196in \samp{MAIL FROM} commands as \var{mail_options}. ESMTP options
197(such as \samp{DSN} commands) that should be used with all \samp{RCPT}
198commands can be passed as \var{rcpt_options}. (If you need to use
199different ESMTP options to different recipients you have to use the
200low-level methods such as \method{mail}, \method{rcpt} and
201\method{data} to send the message.)
202
203\note{The \var{from_addr} and \var{to_addrs} parameters are
204used to construct the message envelope used by the transport agents.
205The \class{SMTP} does not modify the message headers in any way.}
206
207If there has been no previous \samp{EHLO} or \samp{HELO} command this
208session, this method tries ESMTP \samp{EHLO} first. If the server does
209ESMTP, message size and each of the specified options will be passed
210to it (if the option is in the feature set the server advertises). If
211\samp{EHLO} fails, \samp{HELO} will be tried and ESMTP options
212suppressed.
213
214This method will return normally if the mail is accepted for at least
215one recipient. Otherwise it will throw an exception. That is, if this
216method does not throw an exception, then someone should get your mail.
217If this method does not throw an exception, it returns a dictionary,
218with one entry for each recipient that was refused. Each entry
219contains a tuple of the SMTP error code and the accompanying error
220message sent by the server.
221
222This method may raise the following exceptions:
223
224\begin{description}
225\item[\exception{SMTPRecipientsRefused}]
226All recipients were refused. Nobody got the mail. The
227\member{recipients} attribute of the exception object is a dictionary
228with information about the refused recipients (like the one returned
229when at least one recipient was accepted).
230
231\item[\exception{SMTPHeloError}]
232The server didn't reply properly to the \samp{HELO} greeting.
233
234\item[\exception{SMTPSenderRefused}]
235The server didn't accept the \var{from_addr}.
236
237\item[\exception{SMTPDataError}]
238The server replied with an unexpected error code (other than a refusal
239of a recipient).
240\end{description}
241
242Unless otherwise noted, the connection will be open even after
243an exception is raised.
244
245\end{methoddesc}
246
247\begin{methoddesc}{quit}{}
248Terminate the SMTP session and close the connection.
249\end{methoddesc}
250
251Low-level methods corresponding to the standard SMTP/ESMTP commands
252\samp{HELP}, \samp{RSET}, \samp{NOOP}, \samp{MAIL}, \samp{RCPT}, and
253\samp{DATA} are also supported. Normally these do not need to be
254called directly, so they are not documented here. For details,
255consult the module code.
256
257
258\subsection{SMTP Example \label{SMTP-example}}
259
260This example prompts the user for addresses needed in the message
261envelope (`To' and `From' addresses), and the message to be
262delivered. Note that the headers to be included with the message must
263be included in the message as entered; this example doesn't do any
264processing of the \rfc{822} headers. In particular, the `To' and
265`From' addresses must be included in the message headers explicitly.
266
267\begin{verbatim}
268import smtplib
269
270def prompt(prompt):
271 return raw_input(prompt).strip()
272
273fromaddr = prompt("From: ")
274toaddrs = prompt("To: ").split()
275print "Enter message, end with ^D (Unix) or ^Z (Windows):"
276
277# Add the From: and To: headers at the start!
278msg = ("From: %s\r\nTo: %s\r\n\r\n"
279 % (fromaddr, ", ".join(toaddrs)))
280while 1:
281 try:
282 line = raw_input()
283 except EOFError:
284 break
285 if not line:
286 break
287 msg = msg + line
288
289print "Message length is " + repr(len(msg))
290
291server = smtplib.SMTP('localhost')
292server.set_debuglevel(1)
293server.sendmail(fromaddr, toaddrs, msg)
294server.quit()
295\end{verbatim}
Note: See TracBrowser for help on using the repository browser.