17db96d56Sopenharmony_ci:mod:`poplib` --- POP3 protocol client 27db96d56Sopenharmony_ci====================================== 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: poplib 57db96d56Sopenharmony_ci :synopsis: POP3 protocol client (requires sockets). 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. sectionauthor:: Andrew T. Csillag 87db96d56Sopenharmony_ci.. revised by ESR, January 2000 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci**Source code:** :source:`Lib/poplib.py` 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci.. index:: pair: POP3; protocol 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci-------------- 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ciThis module defines a class, :class:`POP3`, which encapsulates a connection to a 177db96d56Sopenharmony_ciPOP3 server and implements the protocol as defined in :rfc:`1939`. The 187db96d56Sopenharmony_ci:class:`POP3` class supports both the minimal and optional command sets from 197db96d56Sopenharmony_ci:rfc:`1939`. The :class:`POP3` class also supports the ``STLS`` command introduced 207db96d56Sopenharmony_ciin :rfc:`2595` to enable encrypted communication on an already established connection. 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ciAdditionally, this module provides a class :class:`POP3_SSL`, which provides 237db96d56Sopenharmony_cisupport for connecting to POP3 servers that use SSL as an underlying protocol 247db96d56Sopenharmony_cilayer. 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ciNote that POP3, though widely supported, is obsolescent. The implementation 277db96d56Sopenharmony_ciquality of POP3 servers varies widely, and too many are quite poor. If your 287db96d56Sopenharmony_cimailserver supports IMAP, you would be better off using the 297db96d56Sopenharmony_ci:class:`imaplib.IMAP4` class, as IMAP servers tend to be better implemented. 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci.. include:: ../includes/wasm-notavail.rst 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_ciThe :mod:`poplib` module provides two classes: 347db96d56Sopenharmony_ci 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ci.. class:: POP3(host, port=POP3_PORT[, timeout]) 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci This class implements the actual POP3 protocol. The connection is created when 397db96d56Sopenharmony_ci the instance is initialized. If *port* is omitted, the standard POP3 port (110) 407db96d56Sopenharmony_ci is used. The optional *timeout* parameter specifies a timeout in seconds for the 417db96d56Sopenharmony_ci connection attempt (if not specified, the global default timeout setting will 427db96d56Sopenharmony_ci be used). 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ci .. audit-event:: poplib.connect self,host,port poplib.POP3 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci .. audit-event:: poplib.putline self,line poplib.POP3 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci All commands will raise an :ref:`auditing event <auditing>` 497db96d56Sopenharmony_ci ``poplib.putline`` with arguments ``self`` and ``line``, 507db96d56Sopenharmony_ci where ``line`` is the bytes about to be sent to the remote host. 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci .. versionchanged:: 3.9 537db96d56Sopenharmony_ci If the *timeout* parameter is set to be zero, it will raise a 547db96d56Sopenharmony_ci :class:`ValueError` to prevent the creation of a non-blocking socket. 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci.. class:: POP3_SSL(host, port=POP3_SSL_PORT, keyfile=None, certfile=None, timeout=None, context=None) 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ci This is a subclass of :class:`POP3` that connects to the server over an SSL 597db96d56Sopenharmony_ci encrypted socket. If *port* is not specified, 995, the standard POP3-over-SSL 607db96d56Sopenharmony_ci port is used. *timeout* works as in the :class:`POP3` constructor. 617db96d56Sopenharmony_ci *context* is an optional :class:`ssl.SSLContext` object which allows 627db96d56Sopenharmony_ci bundling SSL configuration options, certificates and private keys into a 637db96d56Sopenharmony_ci single (potentially long-lived) structure. Please read :ref:`ssl-security` 647db96d56Sopenharmony_ci for best practices. 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ci *keyfile* and *certfile* are a legacy alternative to *context* - they can 677db96d56Sopenharmony_ci point to PEM-formatted private key and certificate chain files, 687db96d56Sopenharmony_ci respectively, for the SSL connection. 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ci .. audit-event:: poplib.connect self,host,port poplib.POP3_SSL 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_ci .. audit-event:: poplib.putline self,line poplib.POP3_SSL 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ci All commands will raise an :ref:`auditing event <auditing>` 757db96d56Sopenharmony_ci ``poplib.putline`` with arguments ``self`` and ``line``, 767db96d56Sopenharmony_ci where ``line`` is the bytes about to be sent to the remote host. 777db96d56Sopenharmony_ci 787db96d56Sopenharmony_ci .. versionchanged:: 3.2 797db96d56Sopenharmony_ci *context* parameter added. 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci .. versionchanged:: 3.4 827db96d56Sopenharmony_ci The class now supports hostname check with 837db96d56Sopenharmony_ci :attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see 847db96d56Sopenharmony_ci :data:`ssl.HAS_SNI`). 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci .. deprecated:: 3.6 877db96d56Sopenharmony_ci 887db96d56Sopenharmony_ci *keyfile* and *certfile* are deprecated in favor of *context*. 897db96d56Sopenharmony_ci Please use :meth:`ssl.SSLContext.load_cert_chain` instead, or let 907db96d56Sopenharmony_ci :func:`ssl.create_default_context` select the system's trusted CA 917db96d56Sopenharmony_ci certificates for you. 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci .. versionchanged:: 3.9 947db96d56Sopenharmony_ci If the *timeout* parameter is set to be zero, it will raise a 957db96d56Sopenharmony_ci :class:`ValueError` to prevent the creation of a non-blocking socket. 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_ciOne exception is defined as an attribute of the :mod:`poplib` module: 987db96d56Sopenharmony_ci 997db96d56Sopenharmony_ci 1007db96d56Sopenharmony_ci.. exception:: error_proto 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci Exception raised on any errors from this module (errors from :mod:`socket` 1037db96d56Sopenharmony_ci module are not caught). The reason for the exception is passed to the 1047db96d56Sopenharmony_ci constructor as a string. 1057db96d56Sopenharmony_ci 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci.. seealso:: 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ci Module :mod:`imaplib` 1107db96d56Sopenharmony_ci The standard Python IMAP module. 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci `Frequently Asked Questions About Fetchmail <http://www.catb.org/~esr/fetchmail/fetchmail-FAQ.html>`_ 1137db96d56Sopenharmony_ci The FAQ for the :program:`fetchmail` POP/IMAP client collects information on 1147db96d56Sopenharmony_ci POP3 server variations and RFC noncompliance that may be useful if you need to 1157db96d56Sopenharmony_ci write an application based on the POP protocol. 1167db96d56Sopenharmony_ci 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ci.. _pop3-objects: 1197db96d56Sopenharmony_ci 1207db96d56Sopenharmony_ciPOP3 Objects 1217db96d56Sopenharmony_ci------------ 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ciAll POP3 commands are represented by methods of the same name, in lowercase; 1247db96d56Sopenharmony_cimost return the response text sent by the server. 1257db96d56Sopenharmony_ci 1267db96d56Sopenharmony_ciA :class:`POP3` instance has the following methods: 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci 1297db96d56Sopenharmony_ci.. method:: POP3.set_debuglevel(level) 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci Set the instance's debugging level. This controls the amount of debugging 1327db96d56Sopenharmony_ci output printed. The default, ``0``, produces no debugging output. A value of 1337db96d56Sopenharmony_ci ``1`` produces a moderate amount of debugging output, generally a single line 1347db96d56Sopenharmony_ci per request. A value of ``2`` or higher produces the maximum amount of 1357db96d56Sopenharmony_ci debugging output, logging each line sent and received on the control connection. 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_ci.. method:: POP3.getwelcome() 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ci Returns the greeting string sent by the POP3 server. 1417db96d56Sopenharmony_ci 1427db96d56Sopenharmony_ci 1437db96d56Sopenharmony_ci.. method:: POP3.capa() 1447db96d56Sopenharmony_ci 1457db96d56Sopenharmony_ci Query the server's capabilities as specified in :rfc:`2449`. 1467db96d56Sopenharmony_ci Returns a dictionary in the form ``{'name': ['param'...]}``. 1477db96d56Sopenharmony_ci 1487db96d56Sopenharmony_ci .. versionadded:: 3.4 1497db96d56Sopenharmony_ci 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ci.. method:: POP3.user(username) 1527db96d56Sopenharmony_ci 1537db96d56Sopenharmony_ci Send user command, response should indicate that a password is required. 1547db96d56Sopenharmony_ci 1557db96d56Sopenharmony_ci 1567db96d56Sopenharmony_ci.. method:: POP3.pass_(password) 1577db96d56Sopenharmony_ci 1587db96d56Sopenharmony_ci Send password, response includes message count and mailbox size. Note: the 1597db96d56Sopenharmony_ci mailbox on the server is locked until :meth:`~poplib.quit` is called. 1607db96d56Sopenharmony_ci 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ci.. method:: POP3.apop(user, secret) 1637db96d56Sopenharmony_ci 1647db96d56Sopenharmony_ci Use the more secure APOP authentication to log into the POP3 server. 1657db96d56Sopenharmony_ci 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_ci.. method:: POP3.rpop(user) 1687db96d56Sopenharmony_ci 1697db96d56Sopenharmony_ci Use RPOP authentication (similar to UNIX r-commands) to log into POP3 server. 1707db96d56Sopenharmony_ci 1717db96d56Sopenharmony_ci 1727db96d56Sopenharmony_ci.. method:: POP3.stat() 1737db96d56Sopenharmony_ci 1747db96d56Sopenharmony_ci Get mailbox status. The result is a tuple of 2 integers: ``(message count, 1757db96d56Sopenharmony_ci mailbox size)``. 1767db96d56Sopenharmony_ci 1777db96d56Sopenharmony_ci 1787db96d56Sopenharmony_ci.. method:: POP3.list([which]) 1797db96d56Sopenharmony_ci 1807db96d56Sopenharmony_ci Request message list, result is in the form ``(response, ['mesg_num octets', 1817db96d56Sopenharmony_ci ...], octets)``. If *which* is set, it is the message to list. 1827db96d56Sopenharmony_ci 1837db96d56Sopenharmony_ci 1847db96d56Sopenharmony_ci.. method:: POP3.retr(which) 1857db96d56Sopenharmony_ci 1867db96d56Sopenharmony_ci Retrieve whole message number *which*, and set its seen flag. Result is in form 1877db96d56Sopenharmony_ci ``(response, ['line', ...], octets)``. 1887db96d56Sopenharmony_ci 1897db96d56Sopenharmony_ci 1907db96d56Sopenharmony_ci.. method:: POP3.dele(which) 1917db96d56Sopenharmony_ci 1927db96d56Sopenharmony_ci Flag message number *which* for deletion. On most servers deletions are not 1937db96d56Sopenharmony_ci actually performed until QUIT (the major exception is Eudora QPOP, which 1947db96d56Sopenharmony_ci deliberately violates the RFCs by doing pending deletes on any disconnect). 1957db96d56Sopenharmony_ci 1967db96d56Sopenharmony_ci 1977db96d56Sopenharmony_ci.. method:: POP3.rset() 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_ci Remove any deletion marks for the mailbox. 2007db96d56Sopenharmony_ci 2017db96d56Sopenharmony_ci 2027db96d56Sopenharmony_ci.. method:: POP3.noop() 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci Do nothing. Might be used as a keep-alive. 2057db96d56Sopenharmony_ci 2067db96d56Sopenharmony_ci 2077db96d56Sopenharmony_ci.. method:: POP3.quit() 2087db96d56Sopenharmony_ci 2097db96d56Sopenharmony_ci Signoff: commit changes, unlock mailbox, drop connection. 2107db96d56Sopenharmony_ci 2117db96d56Sopenharmony_ci 2127db96d56Sopenharmony_ci.. method:: POP3.top(which, howmuch) 2137db96d56Sopenharmony_ci 2147db96d56Sopenharmony_ci Retrieves the message header plus *howmuch* lines of the message after the 2157db96d56Sopenharmony_ci header of message number *which*. Result is in form ``(response, ['line', ...], 2167db96d56Sopenharmony_ci octets)``. 2177db96d56Sopenharmony_ci 2187db96d56Sopenharmony_ci The POP3 TOP command this method uses, unlike the RETR command, doesn't set the 2197db96d56Sopenharmony_ci message's seen flag; unfortunately, TOP is poorly specified in the RFCs and is 2207db96d56Sopenharmony_ci frequently broken in off-brand servers. Test this method by hand against the 2217db96d56Sopenharmony_ci POP3 servers you will use before trusting it. 2227db96d56Sopenharmony_ci 2237db96d56Sopenharmony_ci 2247db96d56Sopenharmony_ci.. method:: POP3.uidl(which=None) 2257db96d56Sopenharmony_ci 2267db96d56Sopenharmony_ci Return message digest (unique id) list. If *which* is specified, result contains 2277db96d56Sopenharmony_ci the unique id for that message in the form ``'response mesgnum uid``, otherwise 2287db96d56Sopenharmony_ci result is list ``(response, ['mesgnum uid', ...], octets)``. 2297db96d56Sopenharmony_ci 2307db96d56Sopenharmony_ci 2317db96d56Sopenharmony_ci.. method:: POP3.utf8() 2327db96d56Sopenharmony_ci 2337db96d56Sopenharmony_ci Try to switch to UTF-8 mode. Returns the server response if successful, 2347db96d56Sopenharmony_ci raises :class:`error_proto` if not. Specified in :RFC:`6856`. 2357db96d56Sopenharmony_ci 2367db96d56Sopenharmony_ci .. versionadded:: 3.5 2377db96d56Sopenharmony_ci 2387db96d56Sopenharmony_ci 2397db96d56Sopenharmony_ci.. method:: POP3.stls(context=None) 2407db96d56Sopenharmony_ci 2417db96d56Sopenharmony_ci Start a TLS session on the active connection as specified in :rfc:`2595`. 2427db96d56Sopenharmony_ci This is only allowed before user authentication 2437db96d56Sopenharmony_ci 2447db96d56Sopenharmony_ci *context* parameter is a :class:`ssl.SSLContext` object which allows 2457db96d56Sopenharmony_ci bundling SSL configuration options, certificates and private keys into 2467db96d56Sopenharmony_ci a single (potentially long-lived) structure. Please read :ref:`ssl-security` 2477db96d56Sopenharmony_ci for best practices. 2487db96d56Sopenharmony_ci 2497db96d56Sopenharmony_ci This method supports hostname checking via 2507db96d56Sopenharmony_ci :attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see 2517db96d56Sopenharmony_ci :data:`ssl.HAS_SNI`). 2527db96d56Sopenharmony_ci 2537db96d56Sopenharmony_ci .. versionadded:: 3.4 2547db96d56Sopenharmony_ci 2557db96d56Sopenharmony_ci 2567db96d56Sopenharmony_ciInstances of :class:`POP3_SSL` have no additional methods. The interface of this 2577db96d56Sopenharmony_cisubclass is identical to its parent. 2587db96d56Sopenharmony_ci 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_ci.. _pop3-example: 2617db96d56Sopenharmony_ci 2627db96d56Sopenharmony_ciPOP3 Example 2637db96d56Sopenharmony_ci------------ 2647db96d56Sopenharmony_ci 2657db96d56Sopenharmony_ciHere is a minimal example (without error checking) that opens a mailbox and 2667db96d56Sopenharmony_ciretrieves and prints all messages:: 2677db96d56Sopenharmony_ci 2687db96d56Sopenharmony_ci import getpass, poplib 2697db96d56Sopenharmony_ci 2707db96d56Sopenharmony_ci M = poplib.POP3('localhost') 2717db96d56Sopenharmony_ci M.user(getpass.getuser()) 2727db96d56Sopenharmony_ci M.pass_(getpass.getpass()) 2737db96d56Sopenharmony_ci numMessages = len(M.list()[1]) 2747db96d56Sopenharmony_ci for i in range(numMessages): 2757db96d56Sopenharmony_ci for j in M.retr(i+1)[1]: 2767db96d56Sopenharmony_ci print(j) 2777db96d56Sopenharmony_ci 2787db96d56Sopenharmony_ciAt the end of the module, there is a test section that contains a more extensive 2797db96d56Sopenharmony_ciexample of usage. 280