Документация Python неофициальный перевод

poplib.md

210 строк · 10.6 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.1/library/poplib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 20.12. `poplib` – клиент протокола POP389Этот модуль определяет класс [`POP3`](https://python-all.ru/3.1/library/poplib.html#poplib.POP3), который инкапсулирует соединение с POP3-сервером и реализует протокол, определённый в [**RFC 1725**](https://python-all.ru/3.1/library/poplib.html). Класс [`POP3`](https://python-all.ru/3.1/library/poplib.html#poplib.POP3) поддерживает как минимальный, так и дополнительный набор команд. Кроме того, этот модуль предоставляет класс [`POP3_SSL`](https://python-all.ru/3.1/library/poplib.html#poplib.POP3_SSL), который обеспечивает поддержку подключения к POP3-серверам, использующим SSL в качестве базового протокольного уровня.1011Обратите внимание, что POP3, хотя и широко поддерживается, является устаревшим. Качество реализации POP3-серверов сильно варьируется, и слишком многие оставляют желать лучшего. Если почтовый сервер поддерживает IMAP, лучше использовать класс [`imaplib.IMAP4`](https://python-all.ru/3.1/library/imaplib.html#imaplib.IMAP4), так как IMAP-серверы обычно реализованы лучше.1213Модуль `poplib` предоставляет один класс:1415#### `class poplib.POP3(host[, port[, timeout]])`1617Этот класс реализует собственно протокол POP3. Соединение создаётся при инициализации экземпляра. Если параметр1819*port*2021опущен, используется стандартный порт POP3 (110). Необязательный параметр2223*timeout*2425задаёт тайм-аут в секундах для попытки подключения (если не указан, будет использована глобальная настройка тайм-аута по умолчанию).2627#### `class poplib.POP3_SSL(host[, port[, keyfile[, certfile]]])`2829Это подкласс3031[`POP3`](https://python-all.ru/3.1/library/poplib.html#poplib.POP3)3233, который подключается к серверу через SSL шифрованный сокет. Если3435*port*3637не указан, используется порт 995, стандартный порт POP3 через SSL.3839*keyfile*4041и4243*certfile*4445также необязательны – они могут содержать PEM-форматированный закрытый ключ и файл цепочки сертификатов для SSL-соединения.4647Модуль `poplib` определяет одно исключение в качестве своего атрибута:4849#### `exception poplib.error_proto`5051Исключение, возбуждаемое при любых ошибках этого модуля (ошибки из модуля5253[`socket`](https://python-all.ru/3.1/library/socket.html#module-socket)5455не перехватываются). Причина исключения передаётся конструктору в виде строки.5657> **См. также**58>59> **Модуль [`imaplib`](https://python-all.ru/3.1/library/imaplib.html#module-imaplib)**60>61> Стандартный модуль Python для IMAP.62>63> **[Часто задаваемые вопросы о Fetchmail](https://python-all.ru/3.1/library/poplib.html)**64>65> FAQ для POP/IMAP-клиента66>67> **fetchmail**68>69> содержит информацию о вариациях POP3-серверов и несоблюдении RFC, которая может быть полезна, если вам нужно написать приложение на основе протокола POP.7071## 20.12.1. Объекты POP37273Все команды POP3 представлены одноимёнными методами в нижнем регистре; большинство из них возвращает текст ответа, отправленный сервером.7475Экземпляр [`POP3`](https://python-all.ru/3.1/library/poplib.html#poplib.POP3) имеет следующие методы:7677#### `POP3.set_debuglevel(level)`7879Устанавливает уровень отладки экземпляра. Это контролирует объём выводимой отладочной информации. Значение по умолчанию,8081`0`8283, не даёт отладочного вывода. Значение8485`1`8687даёт умеренный объём отладочного вывода, как правило, одну строку на запрос. Значение8889`2`9091или выше даёт максимальный объём отладочного вывода, с записью каждой строки, отправленной и полученной по управляющему соединению.9293#### `POP3.getwelcome()`9495Возвращает приветственную строку, отправленную POP3-сервером.9697#### `POP3.user(username)`9899Отправляет команду USER; ответ должен указать, что требуется пароль.100101#### `POP3.pass_(password)`102103Отправляет пароль; ответ включает количество сообщений и размер почтового ящика. Примечание: почтовый ящик на сервере блокируется до тех пор, пока не будет вызван метод104105[`quit()`](https://python-all.ru/3.1/library/constants.html#quit)106107.108109#### `POP3.apop(user, secret)`110111Использует более безопасную аутентификацию APOP для входа на POP3-сервер.112113#### `POP3.rpop(user)`114115Использует аутентификацию RPOP (аналогично UNIX-командам r-\*) для входа на POP3-сервер.116117#### `POP3.stat()`118119Получает статус почтового ящика. Результат – кортеж из двух целых чисел:120121`(message count, mailbox size)`122123.124125#### `POP3.list([which])`126127Запрашивает список сообщений, результат имеет вид128129`(response, ['mesg_num octets', ...], octets)`130131. Если задан параметр132133*which*134135, это номер сообщения для вывода списка.136137#### `POP3.retr(which)`138139Извлекает полное сообщение номер140141*which*142143и устанавливает флаг просмотра. Результат имеет вид144145`(response, ['line', ...], octets)`146147.148149#### `POP3.dele(which)`150151Помечает сообщение номер152153*which*154155для удаления. На большинстве серверов удаление фактически не выполняется до команды QUIT (основное исключение – Eudora QPOP, который намеренно нарушает RFC, выполняя отложенные удаления при любом разрыве соединения).156157#### `POP3.rset()`158159Удаляет все пометки удаления для почтового ящика.160161#### `POP3.noop()`162163Ничего не делает. Может использоваться для поддержания соединения.164165#### `POP3.quit()`166167Завершение сеанса: фиксирует изменения, разблокирует почтовый ящик, закрывает соединение.168169#### `POP3.top(which, howmuch)`170171Извлекает заголовок сообщения и *howmuch* строк после заголовка для сообщения с номером *which*. Результат возвращается в формате `(response, ['line', ...], octets)`.172173Команда TOP POP3, используемая этим методом, в отличие от команды RETR, не устанавливает флаг прочитанности сообщения; к сожалению, TOP плохо специфицирован в RFC и часто некорректно работает на серверах малоизвестных производителей. Перед использованием этого метода проверьте его вручную на тех POP3-серверах, с которыми вы будете работать, прежде чем доверять ему.174175#### `POP3.uidl([which])`176177Возвращает список дайджестов сообщений (уникальных идентификаторов). Если указан178179*which*180181, результат содержит уникальный идентификатор для этого сообщения в формате182183`'response mesgnum uid`184185, в противном случае результат представляет собой список186187`(response, ['mesgnum uid', ...], octets)`188189.190191Экземпляры [`POP3_SSL`](https://python-all.ru/3.1/library/poplib.html#poplib.POP3_SSL) не имеют дополнительных методов. Интерфейс этого подкласса идентичен родительскому.192193## 20.12.2. Пример POP3194195Вот минимальный пример (без проверки ошибок), который открывает почтовый ящик и извлекает и выводит все сообщения:196197```python198import getpass, poplib199200M = poplib.POP3('localhost')201M.user(getpass.getuser())202M.pass_(getpass.getpass())203numMessages = len(M.list()[1])204for i in range(numMessages):205    for j in M.retr(i+1)[1]:206        print(j)207```208209В конце модуля есть тестовый раздел, содержащий более полный пример использования.210