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, как правило, лучше реализованы.
Availability: это не Emscripten, это был не я.
Этот модуль не работает или недоступен на платформах WebAssembly wasm32-emscripten
и wasm32-wasi
. Дополнительную информацию смотрите в разделе Платформы веб-сборки.
Модуль 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 не указан, используется стандартный порт POP3 через SSL - 995. 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: добавлен параметр контекст.
Изменено в версии 3.4: Класс теперь поддерживает проверку имени хоста с помощью
ssl.SSLContext.check_hostname
и Указание имени сервера (см.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
В разделе Часто задаваемые вопросы для клиента 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)¶
Аутентификация пользователя по протоколу POP (аналогично r-командам UNIX) для входа на POP3-сервер.
- POP3.stat()¶
Получаем статус почтового ящика. В результате получаем кортеж из 2 целых чисел:
(message count, mailbox size)
.
- POP3.list([which])¶
Запросите список сообщений, результат будет в виде
(response, ['mesg_num octets', ...], octets)
. Если задано значение which, это будет сообщение для списка.
- POP3.retr(which)¶
Извлеките полный номер сообщения , который, и установите для него флажок «просмотрено». Результат будет иметь вид
(response, ['line', ...], octets)
.
- POP3.dele(which)¶
Отметьте номер сообщения , который требуется удалить. На большинстве серверов удаление фактически не выполняется до завершения работы (основным исключением является Eudora POP, которая намеренно нарушает требования RFC, выполняя отложенные удаления при любом отключении).
- POP3.rset()¶
Удалите все метки удаления для почтового ящика.
- POP3.noop()¶
Ничего не делать. Может быть использован для поддержания жизни.
- POP3.quit()¶
Выход из системы: внесение изменений, разблокировка почтового ящика, разрыв соединения.
- POP3.top(which, howmuch)¶
Извлекает заголовок сообщения плюс сколько строк в сообщении после заголовка с номером сообщения который. Результат имеет вид
(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
и Указания имени сервера (см.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)
В конце модуля есть раздел тестирования, содержащий более подробный пример использования.