Содержание страницы
20.9. poplib – клиент протокола POP3¶poplib – POP3 protocol client
Исходный код: Lib/poplib.py
This module defines a class, POP3, which encapsulates a connection to a
POP3 server and implements the protocol as defined in RFC 1725. The
POP3 class supports both the minimal and optional command sets.
Additionally, this module provides a class POP3_SSL, which provides
support for connecting to POP3 servers that use SSL as an underlying protocol
layer.
Обратите внимание, что POP3, хотя и широко поддерживается, устаревает. Качество реализации POP3-серверов сильно различается, и слишком многие из них довольно плохи. Если ваш почтовый сервер поддерживает IMAP, лучше использовать класс imaplib.IMAP4, так как IMAP-серверы, как правило, реализованы лучше.
Модуль poplib предоставляет два класса:
-
class
poplib.POP3(host[, port[, timeout]])¶ Этот класс реализует собственно протокол POP3. Соединение создаётся при инициализации экземпляра. Если параметр port опущен, используется стандартный порт POP3 (110). Необязательный параметр timeout задаёт тайм-аут в секундах для попытки подключения (если не указан, будет использована глобальная настройка тайм-аута по умолчанию).
Изменено в версии 2.6: добавлен параметр timeout.
-
class
poplib.POP3_SSL(host[, port[, keyfile[, certfile]]])¶ Это подкласс
POP3, который подключается к серверу через SSL-шифрованный сокет. Если port не указан, используется порт 995, стандартный порт POP3-over-SSL. keyfile и certfile также необязательны – они могут содержать закрытый ключ в формате PEM и файл цепочки сертификатов для SSL-соединения.Новое в версии 2.4.
В модуле poplib определено одно исключение в качестве атрибута:
-
exception
poplib.error_proto¶ Исключение, возбуждаемое при любых ошибках этого модуля (ошибки из модуля
socketне перехватываются). Причина исключения передаётся конструктору в виде строки.
См. также
- Модуль
imaplib Стандартный модуль Python для IMAP.
- Часто задаваемые вопросы о Fetchmail
FAQ для POP/IMAP-клиента fetchmail содержит информацию о вариациях POP3-серверов и несоблюдении RFC, которая может быть полезна, если вам нужно написать приложение на основе протокола POP.
20.9.1. Объекты POP3¶POP3 Objects
Все команды POP3 представлены одноимёнными методами в нижнем регистре; большинство из них возвращает текст ответа, отправленный сервером.
Экземпляр POP3 имеет следующие методы:
-
POP3.set_debuglevel(level)¶ Устанавливает уровень отладки экземпляра. Это контролирует объём выводимой отладочной информации. Значение по умолчанию,
0, не даёт отладочного вывода. Значение1даёт умеренный объём отладочного вывода, как правило, одну строку на запрос. Значение2или выше даёт максимальный объём отладочного вывода, с записью каждой строки, отправленной и полученной по управляющему соединению.
-
POP3.getwelcome()¶ Возвращает приветственную строку, отправленную POP3-сервером.
-
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])¶ Возвращает список дайджестов сообщений (уникальных идентификаторов). Если указан which, результат содержит уникальный идентификатор для этого сообщения в формате
'response mesgnum uid, в противном случае результат – список(response, ['mesgnum uid', ...], octets).
Экземпляры POP3_SSL не имеют дополнительных методов. Интерфейс этого подкласса идентичен родительскому.
20.9.2. Пример POP3¶POP3 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
В конце модуля есть тестовый раздел, содержащий более полный пример использования.