1:mod:`smtplib` --- SMTP protocol client 2======================================= 3 4.. module:: smtplib 5 :synopsis: SMTP protocol client (requires sockets). 6 7.. sectionauthor:: Eric S. Raymond <esr@snark.thyrsus.com> 8 9**Source code:** :source:`Lib/smtplib.py` 10 11.. index:: 12 pair: SMTP; protocol 13 single: Simple Mail Transfer Protocol 14 15-------------- 16 17The :mod:`smtplib` module defines an SMTP client session object that can be used 18to send mail to any Internet machine with an SMTP or ESMTP listener daemon. For 19details of SMTP and ESMTP operation, consult :rfc:`821` (Simple Mail Transfer 20Protocol) and :rfc:`1869` (SMTP Service Extensions). 21 22 23.. class:: SMTP(host='', port=0, local_hostname=None[, timeout], source_address=None) 24 25 An :class:`SMTP` instance encapsulates an SMTP connection. It has methods 26 that support a full repertoire of SMTP and ESMTP operations. If the optional 27 host and port parameters are given, the SMTP :meth:`connect` method is 28 called with those parameters during initialization. If specified, 29 *local_hostname* is used as the FQDN of the local host in the HELO/EHLO 30 command. Otherwise, the local hostname is found using 31 :func:`socket.getfqdn`. If the :meth:`connect` call returns anything other 32 than a success code, an :exc:`SMTPConnectError` is raised. The optional 33 *timeout* parameter specifies a timeout in seconds for blocking operations 34 like the connection attempt (if not specified, the global default timeout 35 setting will be used). If the timeout expires, :exc:`socket.timeout` is 36 raised. The optional source_address parameter allows binding 37 to some specific source address in a machine with multiple network 38 interfaces, and/or to some specific source TCP port. It takes a 2-tuple 39 (host, port), for the socket to bind to as its source address before 40 connecting. If omitted (or if host or port are ``''`` and/or 0 respectively) 41 the OS default behavior will be used. 42 43 For normal use, you should only require the initialization/connect, 44 :meth:`sendmail`, and :meth:`SMTP.quit` methods. 45 An example is included below. 46 47 The :class:`SMTP` class supports the :keyword:`with` statement. When used 48 like this, the SMTP ``QUIT`` command is issued automatically when the 49 :keyword:`!with` statement exits. E.g.:: 50 51 >>> from smtplib import SMTP 52 >>> with SMTP("domain.org") as smtp: 53 ... smtp.noop() 54 ... 55 (250, b'Ok') 56 >>> 57 58 .. audit-event:: smtplib.send self,data smtplib.SMTP 59 60 All commands will raise an :ref:`auditing event <auditing>` 61 ``smtplib.SMTP.send`` with arguments ``self`` and ``data``, 62 where ``data`` is the bytes about to be sent to the remote host. 63 64 .. versionchanged:: 3.3 65 Support for the :keyword:`with` statement was added. 66 67 .. versionchanged:: 3.3 68 source_address argument was added. 69 70 .. versionadded:: 3.5 71 The SMTPUTF8 extension (:rfc:`6531`) is now supported. 72 73 74.. class:: SMTP_SSL(host='', port=0, local_hostname=None, keyfile=None, \ 75 certfile=None [, timeout], context=None, \ 76 source_address=None) 77 78 An :class:`SMTP_SSL` instance behaves exactly the same as instances of 79 :class:`SMTP`. :class:`SMTP_SSL` should be used for situations where SSL is 80 required from the beginning of the connection and using :meth:`starttls` is 81 not appropriate. If *host* is not specified, the local host is used. If 82 *port* is zero, the standard SMTP-over-SSL port (465) is used. The optional 83 arguments *local_hostname*, *timeout* and *source_address* have the same 84 meaning as they do in the :class:`SMTP` class. *context*, also optional, 85 can contain a :class:`~ssl.SSLContext` and allows configuring various 86 aspects of the secure connection. Please read :ref:`ssl-security` for 87 best practices. 88 89 *keyfile* and *certfile* are a legacy alternative to *context*, and can 90 point to a PEM formatted private key and certificate chain file for the 91 SSL connection. 92 93 .. versionchanged:: 3.3 94 *context* was added. 95 96 .. versionchanged:: 3.3 97 source_address argument was added. 98 99 .. versionchanged:: 3.4 100 The class now supports hostname check with 101 :attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see 102 :data:`ssl.HAS_SNI`). 103 104 .. deprecated:: 3.6 105 106 *keyfile* and *certfile* are deprecated in favor of *context*. 107 Please use :meth:`ssl.SSLContext.load_cert_chain` instead, or let 108 :func:`ssl.create_default_context` select the system's trusted CA 109 certificates for you. 110 111 112.. class:: LMTP(host='', port=LMTP_PORT, local_hostname=None, source_address=None) 113 114 The LMTP protocol, which is very similar to ESMTP, is heavily based on the 115 standard SMTP client. It's common to use Unix sockets for LMTP, so our 116 :meth:`connect` method must support that as well as a regular host:port 117 server. The optional arguments local_hostname and source_address have the 118 same meaning as they do in the :class:`SMTP` class. To specify a Unix 119 socket, you must use an absolute path for *host*, starting with a '/'. 120 121 Authentication is supported, using the regular SMTP mechanism. When using a 122 Unix socket, LMTP generally don't support or require any authentication, but 123 your mileage might vary. 124 125 126A nice selection of exceptions is defined as well: 127 128 129.. exception:: SMTPException 130 131 Subclass of :exc:`OSError` that is the base exception class for all 132 the other exceptions provided by this module. 133 134 .. versionchanged:: 3.4 135 SMTPException became subclass of :exc:`OSError` 136 137 138.. exception:: SMTPServerDisconnected 139 140 This exception is raised when the server unexpectedly disconnects, or when an 141 attempt is made to use the :class:`SMTP` instance before connecting it to a 142 server. 143 144 145.. exception:: SMTPResponseException 146 147 Base class for all exceptions that include an SMTP error code. These exceptions 148 are generated in some instances when the SMTP server returns an error code. The 149 error code is stored in the :attr:`smtp_code` attribute of the error, and the 150 :attr:`smtp_error` attribute is set to the error message. 151 152 153.. exception:: SMTPSenderRefused 154 155 Sender address refused. In addition to the attributes set by on all 156 :exc:`SMTPResponseException` exceptions, this sets 'sender' to the string that 157 the SMTP server refused. 158 159 160.. exception:: SMTPRecipientsRefused 161 162 All recipient addresses refused. The errors for each recipient are accessible 163 through the attribute :attr:`recipients`, which is a dictionary of exactly the 164 same sort as :meth:`SMTP.sendmail` returns. 165 166 167.. exception:: SMTPDataError 168 169 The SMTP server refused to accept the message data. 170 171 172.. exception:: SMTPConnectError 173 174 Error occurred during establishment of a connection with the server. 175 176 177.. exception:: SMTPHeloError 178 179 The server refused our ``HELO`` message. 180 181 182.. exception:: SMTPNotSupportedError 183 184 The command or option attempted is not supported by the server. 185 186 .. versionadded:: 3.5 187 188 189.. exception:: SMTPAuthenticationError 190 191 SMTP authentication went wrong. Most probably the server didn't accept the 192 username/password combination provided. 193 194 195.. seealso:: 196 197 :rfc:`821` - Simple Mail Transfer Protocol 198 Protocol definition for SMTP. This document covers the model, operating 199 procedure, and protocol details for SMTP. 200 201 :rfc:`1869` - SMTP Service Extensions 202 Definition of the ESMTP extensions for SMTP. This describes a framework for 203 extending SMTP with new commands, supporting dynamic discovery of the commands 204 provided by the server, and defines a few additional commands. 205 206 207.. _smtp-objects: 208 209SMTP Objects 210------------ 211 212An :class:`SMTP` instance has the following methods: 213 214 215.. method:: SMTP.set_debuglevel(level) 216 217 Set the debug output level. A value of 1 or ``True`` for *level* results in 218 debug messages for connection and for all messages sent to and received from 219 the server. A value of 2 for *level* results in these messages being 220 timestamped. 221 222 .. versionchanged:: 3.5 Added debuglevel 2. 223 224 225.. method:: SMTP.docmd(cmd, args='') 226 227 Send a command *cmd* to the server. The optional argument *args* is simply 228 concatenated to the command, separated by a space. 229 230 This returns a 2-tuple composed of a numeric response code and the actual 231 response line (multiline responses are joined into one long line.) 232 233 In normal operation it should not be necessary to call this method explicitly. 234 It is used to implement other methods and may be useful for testing private 235 extensions. 236 237 If the connection to the server is lost while waiting for the reply, 238 :exc:`SMTPServerDisconnected` will be raised. 239 240 241.. method:: SMTP.connect(host='localhost', port=0) 242 243 Connect to a host on a given port. The defaults are to connect to the local 244 host at the standard SMTP port (25). If the hostname ends with a colon (``':'``) 245 followed by a number, that suffix will be stripped off and the number 246 interpreted as the port number to use. This method is automatically invoked by 247 the constructor if a host is specified during instantiation. Returns a 248 2-tuple of the response code and message sent by the server in its 249 connection response. 250 251 .. audit-event:: smtplib.connect self,host,port smtplib.SMTP.connect 252 253 254.. method:: SMTP.helo(name='') 255 256 Identify yourself to the SMTP server using ``HELO``. The hostname argument 257 defaults to the fully qualified domain name of the local host. 258 The message returned by the server is stored as the :attr:`helo_resp` attribute 259 of the object. 260 261 In normal operation it should not be necessary to call this method explicitly. 262 It will be implicitly called by the :meth:`sendmail` when necessary. 263 264 265.. method:: SMTP.ehlo(name='') 266 267 Identify yourself to an ESMTP server using ``EHLO``. The hostname argument 268 defaults to the fully qualified domain name of the local host. Examine the 269 response for ESMTP option and store them for use by :meth:`has_extn`. 270 Also sets several informational attributes: the message returned by 271 the server is stored as the :attr:`ehlo_resp` attribute, :attr:`does_esmtp` 272 is set to true or false depending on whether the server supports ESMTP, and 273 :attr:`esmtp_features` will be a dictionary containing the names of the 274 SMTP service extensions this server supports, and their parameters (if any). 275 276 Unless you wish to use :meth:`has_extn` before sending mail, it should not be 277 necessary to call this method explicitly. It will be implicitly called by 278 :meth:`sendmail` when necessary. 279 280.. method:: SMTP.ehlo_or_helo_if_needed() 281 282 This method calls :meth:`ehlo` and/or :meth:`helo` if there has been no 283 previous ``EHLO`` or ``HELO`` command this session. It tries ESMTP ``EHLO`` 284 first. 285 286 :exc:`SMTPHeloError` 287 The server didn't reply properly to the ``HELO`` greeting. 288 289.. method:: SMTP.has_extn(name) 290 291 Return :const:`True` if *name* is in the set of SMTP service extensions returned 292 by the server, :const:`False` otherwise. Case is ignored. 293 294 295.. method:: SMTP.verify(address) 296 297 Check the validity of an address on this server using SMTP ``VRFY``. Returns a 298 tuple consisting of code 250 and a full :rfc:`822` address (including human 299 name) if the user address is valid. Otherwise returns an SMTP error code of 400 300 or greater and an error string. 301 302 .. note:: 303 304 Many sites disable SMTP ``VRFY`` in order to foil spammers. 305 306 307.. method:: SMTP.login(user, password, *, initial_response_ok=True) 308 309 Log in on an SMTP server that requires authentication. The arguments are the 310 username and the password to authenticate with. If there has been no previous 311 ``EHLO`` or ``HELO`` command this session, this method tries ESMTP ``EHLO`` 312 first. This method will return normally if the authentication was successful, or 313 may raise the following exceptions: 314 315 :exc:`SMTPHeloError` 316 The server didn't reply properly to the ``HELO`` greeting. 317 318 :exc:`SMTPAuthenticationError` 319 The server didn't accept the username/password combination. 320 321 :exc:`SMTPNotSupportedError` 322 The ``AUTH`` command is not supported by the server. 323 324 :exc:`SMTPException` 325 No suitable authentication method was found. 326 327 Each of the authentication methods supported by :mod:`smtplib` are tried in 328 turn if they are advertised as supported by the server. See :meth:`auth` 329 for a list of supported authentication methods. *initial_response_ok* is 330 passed through to :meth:`auth`. 331 332 Optional keyword argument *initial_response_ok* specifies whether, for 333 authentication methods that support it, an "initial response" as specified 334 in :rfc:`4954` can be sent along with the ``AUTH`` command, rather than 335 requiring a challenge/response. 336 337 .. versionchanged:: 3.5 338 :exc:`SMTPNotSupportedError` may be raised, and the 339 *initial_response_ok* parameter was added. 340 341 342.. method:: SMTP.auth(mechanism, authobject, *, initial_response_ok=True) 343 344 Issue an ``SMTP`` ``AUTH`` command for the specified authentication 345 *mechanism*, and handle the challenge response via *authobject*. 346 347 *mechanism* specifies which authentication mechanism is to 348 be used as argument to the ``AUTH`` command; the valid values are 349 those listed in the ``auth`` element of :attr:`esmtp_features`. 350 351 *authobject* must be a callable object taking an optional single argument: 352 353 data = authobject(challenge=None) 354 355 If optional keyword argument *initial_response_ok* is true, 356 ``authobject()`` will be called first with no argument. It can return the 357 :rfc:`4954` "initial response" ASCII ``str`` which will be encoded and sent with 358 the ``AUTH`` command as below. If the ``authobject()`` does not support an 359 initial response (e.g. because it requires a challenge), it should return 360 ``None`` when called with ``challenge=None``. If *initial_response_ok* is 361 false, then ``authobject()`` will not be called first with ``None``. 362 363 If the initial response check returns ``None``, or if *initial_response_ok* is 364 false, ``authobject()`` will be called to process the server's challenge 365 response; the *challenge* argument it is passed will be a ``bytes``. It 366 should return ASCII ``str`` *data* that will be base64 encoded and sent to the 367 server. 368 369 The ``SMTP`` class provides ``authobjects`` for the ``CRAM-MD5``, ``PLAIN``, 370 and ``LOGIN`` mechanisms; they are named ``SMTP.auth_cram_md5``, 371 ``SMTP.auth_plain``, and ``SMTP.auth_login`` respectively. They all require 372 that the ``user`` and ``password`` properties of the ``SMTP`` instance are 373 set to appropriate values. 374 375 User code does not normally need to call ``auth`` directly, but can instead 376 call the :meth:`login` method, which will try each of the above mechanisms 377 in turn, in the order listed. ``auth`` is exposed to facilitate the 378 implementation of authentication methods not (or not yet) supported 379 directly by :mod:`smtplib`. 380 381 .. versionadded:: 3.5 382 383 384.. method:: SMTP.starttls(keyfile=None, certfile=None, context=None) 385 386 Put the SMTP connection in TLS (Transport Layer Security) mode. All SMTP 387 commands that follow will be encrypted. You should then call :meth:`ehlo` 388 again. 389 390 If *keyfile* and *certfile* are provided, they are used to create an 391 :class:`ssl.SSLContext`. 392 393 Optional *context* parameter is an :class:`ssl.SSLContext` object; This is 394 an alternative to using a keyfile and a certfile and if specified both 395 *keyfile* and *certfile* should be ``None``. 396 397 If there has been no previous ``EHLO`` or ``HELO`` command this session, 398 this method tries ESMTP ``EHLO`` first. 399 400 .. deprecated:: 3.6 401 402 *keyfile* and *certfile* are deprecated in favor of *context*. 403 Please use :meth:`ssl.SSLContext.load_cert_chain` instead, or let 404 :func:`ssl.create_default_context` select the system's trusted CA 405 certificates for you. 406 407 :exc:`SMTPHeloError` 408 The server didn't reply properly to the ``HELO`` greeting. 409 410 :exc:`SMTPNotSupportedError` 411 The server does not support the STARTTLS extension. 412 413 :exc:`RuntimeError` 414 SSL/TLS support is not available to your Python interpreter. 415 416 .. versionchanged:: 3.3 417 *context* was added. 418 419 .. versionchanged:: 3.4 420 The method now supports hostname check with 421 :attr:`SSLContext.check_hostname` and *Server Name Indicator* (see 422 :data:`~ssl.HAS_SNI`). 423 424 .. versionchanged:: 3.5 425 The error raised for lack of STARTTLS support is now the 426 :exc:`SMTPNotSupportedError` subclass instead of the base 427 :exc:`SMTPException`. 428 429 430.. method:: SMTP.sendmail(from_addr, to_addrs, msg, mail_options=(), rcpt_options=()) 431 432 Send mail. The required arguments are an :rfc:`822` from-address string, a list 433 of :rfc:`822` to-address strings (a bare string will be treated as a list with 1 434 address), and a message string. The caller may pass a list of ESMTP options 435 (such as ``8bitmime``) to be used in ``MAIL FROM`` commands as *mail_options*. 436 ESMTP options (such as ``DSN`` commands) that should be used with all ``RCPT`` 437 commands can be passed as *rcpt_options*. (If you need to use different ESMTP 438 options to different recipients you have to use the low-level methods such as 439 :meth:`mail`, :meth:`rcpt` and :meth:`data` to send the message.) 440 441 .. note:: 442 443 The *from_addr* and *to_addrs* parameters are used to construct the message 444 envelope used by the transport agents. ``sendmail`` does not modify the 445 message headers in any way. 446 447 *msg* may be a string containing characters in the ASCII range, or a byte 448 string. A string is encoded to bytes using the ascii codec, and lone ``\r`` 449 and ``\n`` characters are converted to ``\r\n`` characters. A byte string is 450 not modified. 451 452 If there has been no previous ``EHLO`` or ``HELO`` command this session, this 453 method tries ESMTP ``EHLO`` first. If the server does ESMTP, message size and 454 each of the specified options will be passed to it (if the option is in the 455 feature set the server advertises). If ``EHLO`` fails, ``HELO`` will be tried 456 and ESMTP options suppressed. 457 458 This method will return normally if the mail is accepted for at least one 459 recipient. Otherwise it will raise an exception. That is, if this method does 460 not raise an exception, then someone should get your mail. If this method does 461 not raise an exception, it returns a dictionary, with one entry for each 462 recipient that was refused. Each entry contains a tuple of the SMTP error code 463 and the accompanying error message sent by the server. 464 465 If ``SMTPUTF8`` is included in *mail_options*, and the server supports it, 466 *from_addr* and *to_addrs* may contain non-ASCII characters. 467 468 This method may raise the following exceptions: 469 470 :exc:`SMTPRecipientsRefused` 471 All recipients were refused. Nobody got the mail. The :attr:`recipients` 472 attribute of the exception object is a dictionary with information about the 473 refused recipients (like the one returned when at least one recipient was 474 accepted). 475 476 :exc:`SMTPHeloError` 477 The server didn't reply properly to the ``HELO`` greeting. 478 479 :exc:`SMTPSenderRefused` 480 The server didn't accept the *from_addr*. 481 482 :exc:`SMTPDataError` 483 The server replied with an unexpected error code (other than a refusal of a 484 recipient). 485 486 :exc:`SMTPNotSupportedError` 487 ``SMTPUTF8`` was given in the *mail_options* but is not supported by the 488 server. 489 490 Unless otherwise noted, the connection will be open even after an exception is 491 raised. 492 493 .. versionchanged:: 3.2 494 *msg* may be a byte string. 495 496 .. versionchanged:: 3.5 497 ``SMTPUTF8`` support added, and :exc:`SMTPNotSupportedError` may be 498 raised if ``SMTPUTF8`` is specified but the server does not support it. 499 500 501.. method:: SMTP.send_message(msg, from_addr=None, to_addrs=None, \ 502 mail_options=(), rcpt_options=()) 503 504 This is a convenience method for calling :meth:`sendmail` with the message 505 represented by an :class:`email.message.Message` object. The arguments have 506 the same meaning as for :meth:`sendmail`, except that *msg* is a ``Message`` 507 object. 508 509 If *from_addr* is ``None`` or *to_addrs* is ``None``, ``send_message`` fills 510 those arguments with addresses extracted from the headers of *msg* as 511 specified in :rfc:`5322`\: *from_addr* is set to the :mailheader:`Sender` 512 field if it is present, and otherwise to the :mailheader:`From` field. 513 *to_addrs* combines the values (if any) of the :mailheader:`To`, 514 :mailheader:`Cc`, and :mailheader:`Bcc` fields from *msg*. If exactly one 515 set of :mailheader:`Resent-*` headers appear in the message, the regular 516 headers are ignored and the :mailheader:`Resent-*` headers are used instead. 517 If the message contains more than one set of :mailheader:`Resent-*` headers, 518 a :exc:`ValueError` is raised, since there is no way to unambiguously detect 519 the most recent set of :mailheader:`Resent-` headers. 520 521 ``send_message`` serializes *msg* using 522 :class:`~email.generator.BytesGenerator` with ``\r\n`` as the *linesep*, and 523 calls :meth:`sendmail` to transmit the resulting message. Regardless of the 524 values of *from_addr* and *to_addrs*, ``send_message`` does not transmit any 525 :mailheader:`Bcc` or :mailheader:`Resent-Bcc` headers that may appear 526 in *msg*. If any of the addresses in *from_addr* and *to_addrs* contain 527 non-ASCII characters and the server does not advertise ``SMTPUTF8`` support, 528 an :exc:`SMTPNotSupported` error is raised. Otherwise the ``Message`` is 529 serialized with a clone of its :mod:`~email.policy` with the 530 :attr:`~email.policy.EmailPolicy.utf8` attribute set to ``True``, and 531 ``SMTPUTF8`` and ``BODY=8BITMIME`` are added to *mail_options*. 532 533 .. versionadded:: 3.2 534 535 .. versionadded:: 3.5 536 Support for internationalized addresses (``SMTPUTF8``). 537 538 539.. method:: SMTP.quit() 540 541 Terminate the SMTP session and close the connection. Return the result of 542 the SMTP ``QUIT`` command. 543 544 545Low-level methods corresponding to the standard SMTP/ESMTP commands ``HELP``, 546``RSET``, ``NOOP``, ``MAIL``, ``RCPT``, and ``DATA`` are also supported. 547Normally these do not need to be called directly, so they are not documented 548here. For details, consult the module code. 549 550 551.. _smtp-example: 552 553SMTP Example 554------------ 555 556This example prompts the user for addresses needed in the message envelope ('To' 557and 'From' addresses), and the message to be delivered. Note that the headers 558to be included with the message must be included in the message as entered; this 559example doesn't do any processing of the :rfc:`822` headers. In particular, the 560'To' and 'From' addresses must be included in the message headers explicitly. :: 561 562 import smtplib 563 564 def prompt(prompt): 565 return input(prompt).strip() 566 567 fromaddr = prompt("From: ") 568 toaddrs = prompt("To: ").split() 569 print("Enter message, end with ^D (Unix) or ^Z (Windows):") 570 571 # Add the From: and To: headers at the start! 572 msg = ("From: %s\r\nTo: %s\r\n\r\n" 573 % (fromaddr, ", ".join(toaddrs))) 574 while True: 575 try: 576 line = input() 577 except EOFError: 578 break 579 if not line: 580 break 581 msg = msg + line 582 583 print("Message length is", len(msg)) 584 585 server = smtplib.SMTP('localhost') 586 server.set_debuglevel(1) 587 server.sendmail(fromaddr, toaddrs, msg) 588 server.quit() 589 590.. note:: 591 592 In general, you will want to use the :mod:`email` package's features to 593 construct an email message, which you can then send 594 via :meth:`~smtplib.SMTP.send_message`; see :ref:`email-examples`. 595