| :mod:`!poplib` --- POP3 protocol client | |
| ======================================= | |
| .. module:: poplib | |
| :synopsis: POP3 protocol client (requires sockets). | |
| **Source code:** :source:`Lib/poplib.py` | |
| .. index:: pair: POP3; protocol | |
| -------------- | |
| This module defines a class, :class:`POP3`, which encapsulates a connection to a | |
| POP3 server and implements the protocol as defined in :rfc:`1939`. The | |
| :class:`POP3` class supports both the minimal and optional command sets from | |
| :rfc:`1939`. The :class:`POP3` class also supports the ``STLS`` command introduced | |
| in :rfc:`2595` to enable encrypted communication on an already established connection. | |
| Additionally, this module provides a class :class:`POP3_SSL`, which provides | |
| support for connecting to POP3 servers that use SSL as an underlying protocol | |
| layer. | |
| Note that POP3, though widely supported, is obsolescent. The implementation | |
| quality of POP3 servers varies widely, and too many are quite poor. If your | |
| mailserver supports IMAP, you would be better off using the | |
| :class:`imaplib.IMAP4` class, as IMAP servers tend to be better implemented. | |
| .. include:: ../includes/wasm-notavail.rst | |
| The :mod:`!poplib` module provides two classes: | |
| .. class:: POP3(host, port=POP3_PORT[, timeout]) | |
| This class implements the actual POP3 protocol. The connection is created when | |
| the instance is initialized. If *port* is omitted, the standard POP3 port (110) | |
| is used. The optional *timeout* parameter specifies a timeout in seconds for the | |
| connection attempt (if not specified, the global default timeout setting will | |
| be used). | |
| .. audit-event:: poplib.connect self,host,port poplib.POP3 | |
| .. audit-event:: poplib.putline self,line poplib.POP3 | |
| All commands will raise an :ref:`auditing event <auditing>` | |
| ``poplib.putline`` with arguments ``self`` and ``line``, | |
| where ``line`` is the bytes about to be sent to the remote host. | |
| .. versionchanged:: 3.9 | |
| If the *timeout* parameter is set to be zero, it will raise a | |
| :class:`ValueError` to prevent the creation of a non-blocking socket. | |
| .. class:: POP3_SSL(host, port=POP3_SSL_PORT, *, timeout=None, context=None) | |
| This is a subclass of :class:`POP3` that connects to the server over an SSL | |
| encrypted socket. If *port* is not specified, 995, the standard POP3-over-SSL | |
| port is used. *timeout* works as in the :class:`POP3` constructor. | |
| *context* is an optional :class:`ssl.SSLContext` object which allows | |
| bundling SSL configuration options, certificates and private keys into a | |
| single (potentially long-lived) structure. Please read :ref:`ssl-security` | |
| for best practices. | |
| .. audit-event:: poplib.connect self,host,port poplib.POP3_SSL | |
| .. audit-event:: poplib.putline self,line poplib.POP3_SSL | |
| All commands will raise an :ref:`auditing event <auditing>` | |
| ``poplib.putline`` with arguments ``self`` and ``line``, | |
| where ``line`` is the bytes about to be sent to the remote host. | |
| .. versionchanged:: 3.2 | |
| *context* parameter added. | |
| .. versionchanged:: 3.4 | |
| The class now supports hostname check with | |
| :attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see | |
| :const:`ssl.HAS_SNI`). | |
| .. versionchanged:: 3.9 | |
| If the *timeout* parameter is set to be zero, it will raise a | |
| :class:`ValueError` to prevent the creation of a non-blocking socket. | |
| .. versionchanged:: 3.12 | |
| The deprecated *keyfile* and *certfile* parameters have been removed. | |
| One exception is defined as an attribute of the :mod:`!poplib` module: | |
| .. exception:: error_proto | |
| Exception raised on any errors from this module (errors from :mod:`socket` | |
| module are not caught). The reason for the exception is passed to the | |
| constructor as a string. | |
| .. seealso:: | |
| Module :mod:`imaplib` | |
| The standard Python IMAP module. | |
| `Frequently Asked Questions About Fetchmail <http://www.catb.org/~esr/fetchmail/fetchmail-FAQ.html>`_ | |
| The FAQ for the :program:`fetchmail` POP/IMAP client collects information on | |
| POP3 server variations and RFC noncompliance that may be useful if you need to | |
| write an application based on the POP protocol. | |
| .. _pop3-objects: | |
| POP3 Objects | |
| ------------ | |
| All POP3 commands are represented by methods of the same name, in lowercase; | |
| most return the response text sent by the server. | |
| A :class:`POP3` instance has the following methods: | |
| .. method:: POP3.set_debuglevel(level) | |
| Set the instance's debugging level. This controls the amount of debugging | |
| output printed. The default, ``0``, produces no debugging output. A value of | |
| ``1`` produces a moderate amount of debugging output, generally a single line | |
| per request. A value of ``2`` or higher produces the maximum amount of | |
| debugging output, logging each line sent and received on the control connection. | |
| .. method:: POP3.getwelcome() | |
| Returns the greeting string sent by the POP3 server. | |
| .. method:: POP3.capa() | |
| Query the server's capabilities as specified in :rfc:`2449`. | |
| Returns a dictionary in the form ``{'name': ['param'...]}``. | |
| .. versionadded:: 3.4 | |
| .. method:: POP3.user(username) | |
| Send user command, response should indicate that a password is required. | |
| .. method:: POP3.pass_(password) | |
| Send password, response includes message count and mailbox size. Note: the | |
| mailbox on the server is locked until :meth:`~POP3.quit` is called. | |
| .. method:: POP3.apop(user, secret) | |
| Use the more secure APOP authentication to log into the POP3 server. | |
| .. method:: POP3.rpop(user) | |
| Use RPOP authentication (similar to UNIX r-commands) to log into POP3 server. | |
| .. method:: POP3.stat() | |
| Get mailbox status. The result is a tuple of 2 integers: ``(message count, | |
| mailbox size)``. | |
| .. method:: POP3.list([which]) | |
| Request message list, result is in the form ``(response, ['mesg_num octets', | |
| ...], octets)``. If *which* is set, it is the message to list. | |
| .. method:: POP3.retr(which) | |
| Retrieve whole message number *which*, and set its seen flag. Result is in form | |
| ``(response, ['line', ...], octets)``. | |
| .. method:: POP3.dele(which) | |
| Flag message number *which* for deletion. On most servers deletions are not | |
| actually performed until QUIT (the major exception is Eudora QPOP, which | |
| deliberately violates the RFCs by doing pending deletes on any disconnect). | |
| .. method:: POP3.rset() | |
| Remove any deletion marks for the mailbox. | |
| .. method:: POP3.noop() | |
| Do nothing. Might be used as a keep-alive. | |
| .. method:: POP3.quit() | |
| Signoff: commit changes, unlock mailbox, drop connection. | |
| .. method:: POP3.top(which, howmuch) | |
| Retrieves the message header plus *howmuch* lines of the message after the | |
| header of message number *which*. Result is in form ``(response, ['line', ...], | |
| octets)``. | |
| The POP3 TOP command this method uses, unlike the RETR command, doesn't set the | |
| message's seen flag; unfortunately, TOP is poorly specified in the RFCs and is | |
| frequently broken in off-brand servers. Test this method by hand against the | |
| POP3 servers you will use before trusting it. | |
| .. method:: POP3.uidl(which=None) | |
| Return message digest (unique id) list. If *which* is specified, result contains | |
| the unique id for that message in the form ``'response mesgnum uid``, otherwise | |
| result is list ``(response, ['mesgnum uid', ...], octets)``. | |
| .. method:: POP3.utf8() | |
| Try to switch to UTF-8 mode. Returns the server response if successful, | |
| raises :class:`error_proto` if not. Specified in :RFC:`6856`. | |
| .. versionadded:: 3.5 | |
| .. method:: POP3.stls(context=None) | |
| Start a TLS session on the active connection as specified in :rfc:`2595`. | |
| This is only allowed before user authentication | |
| *context* parameter is a :class:`ssl.SSLContext` object which allows | |
| bundling SSL configuration options, certificates and private keys into | |
| a single (potentially long-lived) structure. Please read :ref:`ssl-security` | |
| for best practices. | |
| This method supports hostname checking via | |
| :attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see | |
| :const:`ssl.HAS_SNI`). | |
| .. versionadded:: 3.4 | |
| Instances of :class:`POP3_SSL` have no additional methods. The interface of this | |
| subclass is identical to its parent. | |
| .. _pop3-example: | |
| POP3 Example | |
| ------------ | |
| Here is a minimal example (without error checking) that opens a mailbox and | |
| retrieves and prints all messages:: | |
| import getpass, poplib | |
| M = poplib.POP3('localhost') | |
| M.user(getpass.getuser()) | |
| M.pass_(getpass.getpass()) | |
| numMessages = len(M.list()[1]) | |
| for i in range(numMessages): | |
| for j in M.retr(i+1)[1]: | |
| print(j) | |
| At the end of the module, there is a test section that contains a more extensive | |
| example of usage. |