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

Availability: это не Emscripten, это был не я.

Этот модуль не работает или недоступен на платформах WebAssembly wasm32-emscripten и wasm32-wasi. Дополнительную информацию смотрите в разделе Платформы веб-сборки.

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

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

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

Создает auditing event poplib.connect с аргументами self, host, port.

Создает auditing event poplib.putline с аргументами self, line.

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

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

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

keyfile и certfile являются устаревшей альтернативой context - они могут указывать на файлы закрытого ключа в формате PEM и цепочки сертификатов соответственно для SSL-соединения.

Создает auditing event poplib.connect с аргументами self, host, port.

Создает auditing event poplib.putline с аргументами self, line.

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

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

Не рекомендуется, начиная с версии 3.6: keyfile и certfile устарели в пользу context. Пожалуйста, используйте вместо этого ssl.SSLContext.load_cert_chain() или позвольте ssl.create_default_context() выбрать для вас сертификаты доверенного центра сертификации системы.

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

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

exception poplib.error_proto

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

См.также

Модуль imaplib

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

Frequently Asked Questions About 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)

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

POP3.stat()

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

POP3.list([which])

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

POP3.retr(which)

Извлеките полный номер сообщения , который, и установите для него флажок «просмотрено». Результат будет иметь вид (response, ['line', ...], octets).

POP3.dele(which)

Отметьте номер сообщения , который требуется удалить. На большинстве серверов удаление фактически не выполняется до завершения работы (основным исключением является Eudora POP, которая намеренно нарушает требования RFC, выполняя отложенные удаления при любом отключении).

POP3.rset()

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

POP3.noop()

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

POP3.quit()

Выход из системы: внесение изменений, разблокировка почтового ящика, разрыв соединения.

POP3.top(which, howmuch)

Извлекает заголовок сообщения плюс сколько строк в сообщении после заголовка с номером сообщения который. Результат имеет вид (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)

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

Вернуться на верх