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, как правило, лучше реализованы.

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

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

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

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

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

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

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

keyfile и certfile являются устаревшей альтернативой context - они могут указывать на файлы закрытого ключа и цепочки сертификатов в формате PEM, соответственно, для 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.6: keyfile и certfile обесцениваются в пользу context. Пожалуйста, Использовать ssl.SSLContext.load_cert_chain() или позвольте ssl.create_default_context() выбрать сертификаты CA системы, которым доверяют, для вас.

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

exception poplib.error_proto

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

См.также

Модуль imaplib стандартный модуль Python IMAP.

Часто задаваемые вопросы о Fetchmail
Часто задаваемые вопросы о клиенте fetchmail POP/IMAP собирают информацию о вариантах сервера 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)

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

POP3.pass_(password)

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

POP3.apop(user, secret)

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

POP3.rpop(user)

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

POP3.stat()

Получение состояния почтового ящика. В результате получается кортеж из 2 целых чисел: (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()

Ничего не делает. Может быть использовано для поддержания соединения (keep-alive).

POP3.quit()

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

POP3.top(which, howmuch)

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

ГЛАВНАЯ команда 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 нет дополнительных методов. Интерфейс этого подкласса идентичен своему родителю.

Пример 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)

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