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 задано значение ноль, будет вызвано исключение
ValueError, чтобы предотвратить создание неблокирующего сокета.
-
class poplib.POP3_SSL(host, port=POP3_SSL_PORT, *, timeout=None, context=None) -
Это подкласс
POP3, который подключается к серверу через сокет с шифрованием SSL. Если параметр port не указан, используется порт 995 — стандартный порт POP3 поверх SSL. Параметр 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 задано значение ноль, будет вызвано исключение
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 (аналогичную r-командам UNIX) для входа на сервер 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 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/poplib.html