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не перехватываются). Причина исключения передаётся конструктору в виде строки.
См. также
-
Moduleimaplib -
Стандартный модуль 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