Документация Python неофициальный перевод
Содержание страницы

poplib – клиент протокола POP3poplib – POP3 protocol client

Исходный код: 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 и Server Name Indication (см. ssl.HAS_SNI).

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

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

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

exception poplib.error_proto

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

См. также

Модуль imaplib

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

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

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

Объекты POP3POP3 Objects

Все команды 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).

Команда TOP POP3, используемая этим методом, в отличие от команды 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 и Server Name Indication (см. ssl.HAS_SNI).

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

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

Пример POP3POP3 Example

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

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)

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