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. Соединение создается при инициализации экземпляра. Если порт опущен, используется стандартный порт 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-сокету. Если порт не указан, используется 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()выбрать доверенные сертификаты ЦС вашей системы.Изменено в версии 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–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/library/poplib.html