Spec-Zone.ru › Python 3.13

poplib — клиент протокола POP3

Исходный код: Lib/poplib.py

Этот модуль определяет класс POP3, который инкапсулирует подключение к серверу POP3 и реализует протокол, определённый в RFC 1939. Класс POP3 поддерживает как минимальный, так и дополнительный наборы команд из RFC 1939. Класс POP3 также поддерживает команду STLS, введённую в RFC 2595 для включения шифрованной связи в уже установленном соединении.

Кроме того, этот модуль предоставляет класс POP3_SSL, который позволяет подключаться к серверам POP3, использующим SSL в качестве базового протокольного уровня.

Обратите внимание, что POP3, несмотря на широкую поддержку, устаревает. Качество реализации серверов POP3 сильно различается, и слишком многие из них работают весьма неудовлетворительно. Если ваш почтовый сервер поддерживает IMAP, лучше использовать класс imaplib.IMAP4, поскольку серверы IMAP, как правило, реализованы качественнее.

Доступность: недоступен в WASI.

Этот модуль не работает или недоступен в WebAssembly. Дополнительные сведения см. в разделе Платформы WebAssembly.

Модуль poplib предоставляет два класса:

class poplib.POP3(host, port=POP3_PORT[, timeout])

Этот класс реализует сам протокол POP3. Подключение создаётся при инициализации экземпляра. Если параметр port не указан, используется стандартный порт POP3 (110). Необязательный параметр timeout задаёт время ожидания в секундах при попытке подключения (если он не указан, используется глобальное значение тайм-аута по умолчанию).

Вызывает событие аудита poplib.connect с аргументами self, host, port.

Все команды вызывают событие аудита poplib.putline с аргументами self и line, где line — байты, которые будут отправлены удалённому хосту.

Изменено в версии 3.9: Если для параметра timeout задано значение zero, будет вызвано исключение ValueError, чтобы предотвратить создание неблокирующего сокета.

class poplib.POP3_SSL(host, port=POP3_SSL_PORT, *, timeout=None, context=None)

Этот класс является подклассом POP3 и подключается к серверу через зашифрованный SSL-сокет. Если параметр port не указан, используется стандартный порт POP3 через SSL — 995. Параметр timeout работает так же, как в конструкторе POP3. Параметр context — необязательный объект ssl.SSLContext, позволяющий объединить параметры конфигурации SSL, сертификаты и закрытые ключи в одну (потенциально долгоживущую) структуру. Рекомендации по обеспечению безопасности см. в разделе Вопросы безопасности.

Вызывает событие аудита poplib.connect с аргументами self, host, port.

Все команды вызывают событие аудита poplib.putline с аргументами self и line, где line — байты, которые будут отправлены удалённому хосту.

Изменено в версии 3.2: Добавлен параметр context.

Изменено в версии 3.4: Теперь класс поддерживает проверку имени хоста с помощью ssl.SSLContext.check_hostname и индикацию имени сервера (см. ssl.HAS_SNI).

Изменено в версии 3.9: Если для параметра timeout задано значение zero, будет вызвано исключение ValueError, чтобы предотвратить создание неблокирующего сокета.

Изменено в версии 3.12: Устаревшие параметры keyfile и certfile удалены.

В качестве атрибута модуля poplib определено одно исключение:

exception poplib.error_proto

Исключение, вызываемое при любых ошибках этого модуля (ошибки модуля socket не перехватываются). Причина исключения передаётся конструктору в виде строки.

См. также

Module imaplib

Стандартный модуль Python для IMAP.

Часто задаваемые вопросы о Fetchmail

В разделе часто задаваемых вопросов о POP/IMAP-клиенте fetchmail собрана информация о различиях между серверами POP3 и их несоответствиях RFC; она может быть полезна, если вам нужно написать приложение на основе протокола POP.

Объекты POP3

Каждая команда POP3 представлена методом с таким же именем в нижнем регистре; большинство методов возвращают текст ответа, отправленный сервером.

Экземпляр POP3 имеет следующие методы:

POP3.set_debuglevel(level)

Задаёт уровень отладки экземпляра. Он определяет объём выводимой отладочной информации. Значение по умолчанию, 0, отключает вывод отладочной информации. Значение 1 обеспечивает умеренный объём отладочной информации — обычно по одной строке на запрос. Значение 2 или выше обеспечивает максимальный объём отладочной информации: в журнал записывается каждая отправленная и полученная строка управляющего соединения.

POP3.getwelcome()

Возвращает строку приветствия, отправленную сервером POP3.

POP3.capa()

Запрашивает возможности сервера, определённые в RFC 2449. Возвращает словарь в формате {'name': ['param'...]}.

Добавлено в версии 3.4.

POP3.user(username)

Отправляет команду user; в ответе должно быть указано, что требуется пароль.

POP3.pass_(password)

Отправляет пароль; ответ содержит количество сообщений и размер почтового ящика. Примечание: почтовый ящик на сервере заблокирован до вызова quit().

POP3.apop(user, secret)

Использует более безопасную аутентификацию APOP для входа на сервер POP3.

POP3.rpop(user)

Использует аутентификацию RPOP (аналогичную UNIX r-командам) для входа на сервер POP3.

POP3.stat()

Получает состояние почтового ящика. Результат — кортеж из двух целых чисел: (message count, mailbox size).

POP3.list([which])

Запрашивает список сообщений; результат имеет формат (response, ['mesg_num octets', ...], octets). Если задан параметр which, он указывает сообщение для включения в список.

POP3.retr(which)

Получает сообщение с номером which целиком и устанавливает для него флаг прочтения. Результат имеет формат (response, ['line', ...], octets).

POP3.dele(which)

Помечает сообщение с номером which для удаления. На большинстве серверов сообщения фактически удаляются только после команды QUIT (главное исключение — Eudora QPOP, который намеренно нарушает RFC и выполняет отложенное удаление при любом отключении).

POP3.rset()

Снимает все пометки удаления в почтовом ящике.

POP3.noop()

Ничего не делает. Может использоваться для поддержания соединения.

POP3.quit()

Завершает сеанс: фиксирует изменения, разблокирует почтовый ящик и закрывает соединение.

POP3.top(which, howmuch)

Получает заголовок сообщения и howmuch строк его тела после заголовка сообщения с номером which. Результат имеет формат (response, ['line', ...], octets).

Команда POP3 TOP, используемая этим методом, в отличие от команды RETR, не устанавливает флаг прочтения сообщения; к сожалению, TOP недостаточно чётко описана в RFC и часто не работает на малоизвестных серверах. Прежде чем полагаться на этот метод, проверьте его вручную на используемых вами серверах POP3.

POP3.uidl(which=None)

Возвращает список дайджестов сообщений (уникальных идентификаторов). Если указан параметр which, результат содержит уникальный идентификатор этого сообщения в формате 'response mesgnum uid; в противном случае результатом будет список (response, ['mesgnum uid', ...], octets).

POP3.utf8()

Пытается переключиться в режим UTF-8. При успехе возвращает ответ сервера, в противном случае вызывает исключение error_proto. Описан в RFC 6856.

Добавлено в версии 3.5.

POP3.stls(context=None)

Запускает сеанс TLS для активного соединения, как указано в RFC 2595. Это разрешено только до аутентификации пользователя.

Параметр context — это объект ssl.SSLContext, позволяющий объединить параметры конфигурации SSL, сертификаты и закрытые ключи в одну (потенциально долгоживущую) структуру. Рекомендации по обеспечению безопасности см. в разделе Вопросы безопасности.

Этот метод поддерживает проверку имени хоста с помощью ssl.SSLContext.check_hostname и индикацию имени сервера (см. ssl.HAS_SNI).

Добавлено в версии 3.4.

Экземпляры POP3_SSL не имеют дополнительных методов. Интерфейс этого подкласса идентичен интерфейсу родительского класса.

Пример POP3

Ниже приведён минимальный пример (без проверки ошибок), который открывает почтовый ящик, получает все сообщения и выводит их:

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)

В конце модуля находится раздел с тестом, содержащий более подробный пример использования.

© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/poplib.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API