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— байты, которые собираются отправить удалённому хосту.Изменено в версии 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 через 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 системы.Изменено в версии 3.9: Если параметр timeout установлен в ноль, будет выброшено исключение
ValueErrorдля предотвращения создания неблокируемого сокета.
Одно исключение определено как атрибут модуля poplib:
-
exception poplib.error_proto -
Исключение, вызываемое при любых ошибках этого модуля (ошибки модуля
socketне обрабатываются). Причина исключения передаётся в конструктор в виде строки.
См. также
-
Moduleimaplib -
Стандартный модуль Python для IMAP.
- Часто задаваемые вопросы о Fetchmail
-
FAQ клиента POP/IMAP fetchmail содержит информацию о вариантах серверов 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 (аналогично командам UNIX r-) для входа на сервер 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() -
Не выполняет никаких действий. Может использоваться для поддержания соединения.
-
POP3.quit() -
Выход: сохранение изменений, разблокировка почтового ящика, разрыв соединения.
-
POP3.top(which, howmuch) -
Извлекает заголовок сообщения плюс howmuch строк сообщения после заголовка сообщения с номером which. Результат в форме
(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и 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)
В конце модуля есть тестовый раздел, содержащий более подробный пример использования.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/poplib.html