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

Вызывает 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 не указан, используется 995, стандартный порт POP3-over-SSL. 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: Добавлен параметр 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() выбрать для вас сертификаты доверенных центров сертификации системы.

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

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

exception poplib.error_proto

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

См.также

Модуль imaplib

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

Frequently Asked Questions About Fetchmail

В FAQ для клиента 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)

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

POP3.rset()

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

POP3.noop()

Ничего не делать. Может использоваться в качестве keep-alive.

POP3.quit()

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

POP3.top(which, howmuch)

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

Команда POP3 TOP, которую использует этот метод, в отличие от команды RETR, не устанавливает флаг seen сообщения; к сожалению, TOP плохо прописана в RFC и часто ломается в серверах других марок. Прежде чем доверять этому методу, проверьте его вручную на серверах POP3, которые вы будете использовать.

POP3.uidl(which=None)

Возвращает список дайджестов сообщений (уникальных идентификаторов). Если указано which, результат содержит уникальный id для данного сообщения в виде '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)

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

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