imaplib
— Клиент протокола IMAP4¶
Исходный код: Lib/imaplib.py
Модуль определяет три класса, IMAP4
, IMAP4_SSL
и IMAP4_stream
,
которые инкапсулируют связь с сервером IMAP4 и осуществляют большое
подмножество протокола клиента IMAP4rev1, как определено в RFC 2060. Он
обратно совместим с серверами IMAP4 (RFC 1730), но обратите внимание, что
команда STATUS
не поддерживается в IMAP4.
Три класса обеспечены модулем imaplib
, IMAP4
- основа class:
-
class
imaplib.
IMAP4
(host='', port=IMAP4_PORT)¶ Этот класс реализует фактический протокол IMAP4. Создается соединение, и при инициализации IMAP4 определяется версия протокола (IMAP4rev1 или сущность). Если host не указан, то
''
(узел локальная) является используемый. Если параметр port опущен, стандартный порт IMAP4 (143) имеет значение используемый.Класс
IMAP4
поддерживаетwith
инструкция. Когда используемый как это, команда IMAP4LOGOUT
дана автоматически, когдаwith
инструкция выходит. Например.:>>> from imaplib import IMAP4 >>> with IMAP4("domain.org") as M: ... M.noop() ... ('OK', [b'Nothing Accomplished. d25if65hy903weo.87'])
Изменено в версии 3.5: Добавлена поддержка
with
инструкции.
Три исключения определяются как атрибуты класса IMAP4
:
-
exception
IMAP4.
error
¶ Исключение при возникновении ошибок. Причина исключения передается конструктору как строка.
-
exception
IMAP4.
abort
¶ Ошибки сервера IMAP4 вызывают появление этого исключения. Это подкласс
IMAP4.error
. Обратите внимание, что закрытие сущность и создание экземпляра нового обычно допускает восстановление из этого исключения.
-
exception
IMAP4.
readonly
¶ Это исключение возникает, когда состояние почтового ящика, доступного для записи, изменяется сервером. Это подкласс
IMAP4.error
. У другого клиента теперь есть разрешение на запись, и для повторного получения разрешения на запись необходимо повторно открыть почтовый ящик.
Также существует подкласс для безопасных подключений:
-
class
imaplib.
IMAP4_SSL
(host='', port=IMAP4_SSL_PORT, keyfile=None, certfile=None, ssl_context=None)¶ Это подкласс, полученный из
IMAP4
, который подключается через SSL- шифрованный сокет (для использования этого класса необходим модуль сокет, который должен быть скомпилирован с поддержкой SSL). Если host не указан, то''
(узел локальная) является используемый. Если port пропущен, стандарт IMAP4-over-SSL порт (993) является используемый. ssl_context является объектомssl.SSLContext
, который позволяет объединить опции конфигурации SSL, сертификаты и закрытые ключи в единую (потенциально долгоживущую) структуру. Пожалуйста, прочитайте Соображения безопасности для лучших практик.keyfile и certfile являются устаревшей альтернативой ssl_context - они могут указывать на файлы с закрытым ключом и цепью сертификатов в формате PEM для SSL-соединения. Отметим, что параметры keyfile/certfile являются взаимоисключающими с ssl_context,
ValueError
поднимается, если keyfile/certfile предоставляется вместе с ssl_context.Изменено в версии 3.3: Добавлен параметр ssl_context .
Изменено в версии 3.4: Теперь класс поддерживает проверку имени хоста с помощью
ssl.SSLContext.check_hostname
и Указание имени сервера (см.ssl.HAS_SNI
).Не рекомендуется, начиная с версии 3.6: keyfile и certfile обесцениваются в пользу ssl_context. Пожалуйста, используйте
ssl.SSLContext.load_cert_chain()
или позвольтеssl.create_default_context()
выбрать свидетельства CA системы, которым доверяют, для вас.
Второй подкласс учитывает соединения, созданные дочерним процессом:
-
class
imaplib.
IMAP4_stream
(command)¶ Это - подкласс, полученный из
IMAP4
, который соединяется с файлом дескрипторыstdin/stdout
, созданным, передавая command кsubprocess.Popen()
.
Определены следующие функции утилиты:
-
imaplib.
Internaldate2tuple
(datestr)¶ Разобрать IMAP4
INTERNALDATE
строка и соответствующее время локальная возвращает. возвращает значение - кортежtime.struct_time
илиNone
, если у строка есть неправильный формат.
-
imaplib.
Int2AP
(num)¶ Преобразует целое число в представление строка, используя символы из набора [
A
..P
].
-
imaplib.
ParseFlags
(flagstr)¶ Преобразует ответ IMAP4
FLAGS
в кортеж отдельных флагов.
-
imaplib.
Time2Internaldate
(date_time)¶ Преобразовать date_time в представление IMAP4
INTERNALDATE
. возвращает значение - это строка в виде:"DD-Mmm-YYYY HH:MM:SS +HHMM"
(включая двойные кавычки). Аргумент date_time может быть числом (int или float), представляющим секунды, начиная с эпохи (как возвращенныйtime.time()
), 9-кортежем, представляющим сущность локального времениtime.struct_time
(как возвращенныйtime.localtime()
), осведомленным сущностьdatetime.datetime
или двойным строка. В последнем случае предполагается, что он уже в правильном формате.
Обратите внимание, что номера сообщений IMAP4 изменяются по мере изменения
почтового ящика; в частности, после выполнения командой EXPUNGE
удалений
остальные сообщения перенумеруются. Таким образом, очень желательно использовать
UIDs вместо этого, с командой UID.
В конце модуля имеется раздел тестирования, содержащий более подробный пример использования.
См.также
Документы, описывающие протокол, и источники и наборы из двух предметов для серверов, осуществляющих его, могут все быть найдены в IMAP Информационный Центр Вашингтонского университета (https://www.washington.edu/imap/).
Объекты IMAP4¶
Все команды IMAP4rev1 представлены методами с одним и тем же именем в верхнем или нижнем регистре.
Все аргументы в команды преобразуются в строки, за исключением AUTHENTICATE
,
и последний аргумент в APPEND
, который передается как IMAP4 литерал. При
необходимости (строка содержит чувствительные к протоколу знаки IMAP4 и не
приложен или к круглым скобкам или к дважды указывает), каждый строка
указан. Тем не менее, аргумент password для команды LOGIN
всегда
ставится в кавычки. Если вы не хотите иметь аргумент указанный строка
(например: аргумент flags STORE
), тогда прилагают строка в
круглых скобках (например: r'(\Deleted)'
).
Каждая команда возвращает кортеж: (type, [data, ...])
где type обычно является
'OK'
или 'NO'
, а data - либо текст из ответа команды, либо
обязательные результаты команды. Каждый data является либо строка,
либо кортежем. Если кортеж, то первая часть является заголовком ответа, а вторая
часть содержит данные (то есть «литерал» значение).
Опции message_set к командам ниже - это строка, указывающая одно или
несколько сообщений, с которыми необходимо действовать. Это может быть простой
номер сообщения ('1'
), диапазон номеров сообщений ('2:4'
) или
группа несмежных диапазонов, разделенных запятыми ('1:3,6:9'
). Диапазон может
содержать звездочку для обозначения бесконечной верхней границы ('3:*'
).
Метод IMAP4
сущность содержит следующие методы:
-
IMAP4.
append
(mailbox, flags, date_time, message)¶ Добавить message к именованному почтовому ящику.
-
IMAP4.
authenticate
(mechanism, authobject)¶ Подтвердить подлинность команды — требует обработки ответа.
mechanism определяет, какой механизм идентификации должен быть используемый - это должно появиться в переменном
capabilities
сущность в формеAUTH=mechanism
.authobject должен быть вызываемым объектом:
data = authobject(response)
Он будет вызван для обработки ответов продолжения сервера; переданный аргумент response будет
bytes
. Это должно возвращаетbytes
data, который будет base64 кодированный и посланный в сервер. Это должно возвращаетNone
, если ответ аварийного прекращения работы клиента*
нужно послать вместо этого.Изменено в версии 3.5: Имена пользователей строка и пароли - теперь кодированный к
utf-8
вместо того, чтобы быть ограниченными ASCII.
-
IMAP4.
check
()¶ Почтовый ящик контрольной точки на сервере.
-
IMAP4.
close
()¶ Закрыть выбранный почтовый ящик. Удаленные сообщения удаляются из почтового ящика, доступного для записи. Это - рекомендуемая команда перед
LOGOUT
.
-
IMAP4.
copy
(message_set, new_mailbox)¶ Копировать сообщения message_set в конец new_mailbox.
-
IMAP4.
create
(mailbox)¶ Создать новый почтовый ящик с именем mailbox.
-
IMAP4.
delete
(mailbox)¶ Удалить старый почтовый ящик с именем mailbox.
-
IMAP4.
deleteacl
(mailbox, who)¶ Удалить ACL (удалите все права) для пользователя в почтовом ящике.
-
IMAP4.
enable
(capability)¶ Включите capability (см. RFC 5161). Большинство возможностей не требуется включать. В настоящее время поддерживается только функция
UTF8=ACCEPT
(см. RFC 6855).
-
IMAP4.
expunge
()¶ Окончательное удаление удаленных элементов из выбранного почтового ящика. Создает ответ
EXPUNGE
для каждого удаленного сообщения. Возвращенные данные содержат список номеров сообщенийEXPUNGE
в порядке их получения.
-
IMAP4.
fetch
(message_set, message_parts)¶ Выборка (части) сообщений. message_parts должен быть строка имен частей сообщения в скобках, например:
"(UID BODY[TEXT])"
. Возвращаемые данные представляют собой кортежи конверта части сообщения и данных.
-
IMAP4.
getacl
(mailbox)¶ Получить
ACL
s для mailbox. Метод не является стандартным, но поддерживается серверомCyrus
.
-
IMAP4.
getannotation
(mailbox, entry, attribute)¶ Получить указанный
ANNOTATION
s для mailbox. Метод не является стандартным, но поддерживается серверомCyrus
.
-
IMAP4.
getquota
(root)¶ Получить использование и пределы ресурса root
quota
. Этот метод - часть расширения QUOTA IMAP4, определенного в rfc2087.
-
IMAP4.
getquotaroot
(mailbox)¶ Получить список
quota
roots
для именованного mailbox. Этот метод - часть расширения кВОТЫ IMAP4, определенного в rfc2087.
-
IMAP4.
list
([directory[, pattern]])¶ Почтовый ящик списка называет в directory, соответствующем pattern. Дефолты directory к почтовой папке верхнего уровня и дефолты pattern, чтобы соответствовать чему-либо. Возвращенные данные содержат список ответов
LIST
.
-
IMAP4.
login
(user, password)¶ Определите клиента с помощью открытого пароля. password будет указан.
-
IMAP4.
login_cram_md5
(user, password)¶ Использование силы идентификации
CRAM-MD5
, опознавая клиента, чтобы защитить пароль. Будет только работать, если сервер ответCAPABILITY
будет включать фразуAUTH=CRAM-MD5
.
-
IMAP4.
logout
()¶ Завершение подключения к серверу. Ответ возвращает сервера
BYE
.Изменено в версии 3.8: Метод больше не игнорирует произвольные исключения.
-
IMAP4.
lsub
(directory='""', pattern='*')¶ Список имен подписанных почтовых ящиков в шаблоне соответствия каталогов. Дефолты directory к справочнику высшего уровня и дефолты pattern, чтобы соответствовать любому почтовому ящику. Возвращаемые данные представляют собой кортежи конверта части сообщения и данных.
-
IMAP4.
myrights
(mailbox)¶ Показать мои ACL для почтового ящика (то есть права, которые у меня есть на почтовый ящик).
-
IMAP4.
noop
()¶ Отправить
NOOP
на сервер.
-
IMAP4.
open
(host, port)¶ Открывает сокет для port в host. Этот метод неявно вызывается конструктором
IMAP4
. Объекты соединения, установленные этим методом, будут используемый в методахIMAP4.read()
,IMAP4.readline()
,IMAP4.send()
иIMAP4.shutdown()
. Этот метод можно переопределить.Raises an auditing event
imaplib.open
with argumentsself
,host
,port
.
-
IMAP4.
partial
(message_num, message_part, start, length)¶ Получить усеченную часть сообщения. Возвращенные данные представляют собой кортеж конверта части сообщения и данных.
-
IMAP4.
proxyauth
(user)¶ Предположим, что аутентификация является user. Позволяет авторизованному администратору выполнять прокси в почтовом ящике любого пользователя.
-
IMAP4.
read
(size)¶ Считывает size байт с удаленного сервера. Этот метод можно переопределить.
-
IMAP4.
readline
()¶ Считывает одну строку с удаленного сервера. Этот метод можно переопределить.
-
IMAP4.
recent
()¶ Запрос сервера на обновление. Возвращаемые данные являются
None
, если нет новых сообщений, иначе значение ответаRECENT
.
-
IMAP4.
rename
(oldmailbox, newmailbox)¶ Переименовать почтовый ящик с именем oldmailbox в newmailbox.
-
IMAP4.
response
(code)¶ Возвращает данные для ответа code, если они получены, или
None
. Возвращает данный код, вместо обычного типа.
-
IMAP4.
search
(charset, criterion[, ...])¶ Поиск соответствующих сообщений в почтовом ящике. charset может быть
None
, и в этом случае в запросе к серверу не будет указан ни одинCHARSET
. Протокол IMAP требует указания по крайней мере одного критерия; исключение будет поднято когда сервер возвращает ошибка. charset должна бытьNone
, если функцияUTF8=ACCEPT
была включена с помощью командыenable()
.Пример:
# M подключенный экземпляр IMAP4 ... typ, msgnums = M.search(None, 'FROM', '"LDJ"') # или: typ, msgnums = M.search(None, '(FROM "LDJ")')
-
IMAP4.
select
(mailbox='INBOX', readonly=False)¶ Выберите почтовый ящик. Возвращаемые данные - это количество сообщений в mailbox (ответ
EXISTS
). Дефолт mailbox является'INBOX'
. Если установлен флаг readonly, изменения почтового ящика запрещены.
-
IMAP4.
send
(data)¶ Отправляет
data
на удаленный сервер. Этот метод можно переопределить.Raises an auditing event
imaplib.send
with argumentsself
,data
.
-
IMAP4.
setacl
(mailbox, who, what)¶ Задайте
ACL
для mailbox. Метод не является стандартным, но поддерживается серверомCyrus
.
-
IMAP4.
setannotation
(mailbox, entry, attribute[, ...])¶ Установите
ANNOTATION
s для mailbox. Метод не является стандартным, но поддерживается серверомCyrus
.
-
IMAP4.
setquota
(root, limits)¶ Установите ресурс root
quota
limits. Этот метод - часть расширения кВОТЫ IMAP4, определенного в rfc2087.
-
IMAP4.
shutdown
()¶ В
open
установлено тесное соединение. Этот метод неявно вызываетсяIMAP4.logout()
. Этот метод можно переопределить.
-
IMAP4.
socket
()¶ Возвращает сокет сущность используемый для подключения к серверу.
-
IMAP4.
sort
(sort_criteria, charset, search_criterion[, ...])¶ Команда
sort
является вариантомsearch
с семантикой сортировки для результатов. Возвращенные данные содержат разделенный пробелом список соответствующих номеров сообщений.Сортировка имеет два аргумента перед аргументами search_criterion; список sort_criteria в скобках и charset поиска. Обратите внимание, что в отличие от
search
, поиск аргумент charset обязателен. Существует также командаuid sort
, которая соответствуетsort
тому, какuid search
соответствуетsearch
. Командаsort
сначала выполняет поиск в почтовом ящике сообщений, соответствующих заданным критериям поиска, используя аргумент charset для интерпретации строки в критериях поиска. Это тогда возвращает числа соответствия сообщениям.Это команда расширения
IMAP4rev1
.
-
IMAP4.
starttls
(ssl_context=None)¶ Отправить команду
STARTTLS
. Аргумент ssl_context необязателен и должен быть объектомssl.SSLContext
. Это активирует шифрование для подключения IMAP. Пожалуйста, прочитайте Соображения безопасности для лучших практик.Добавлено в версии 3.2.
Изменено в версии 3.4: Теперь метод поддерживает проверку имени хоста с помощью
ssl.SSLContext.check_hostname
и Указание имени сервера (см.ssl.HAS_SNI
).
-
IMAP4.
status
(mailbox, names)¶ Запрос именованных условий состояния для mailbox.
-
IMAP4.
store
(message_set, command, flag_list)¶ Изменяет расположение флага для сообщений в почтовом ящике. command указывается в разделе 6.4.6 RFC 2060 как один из «FLAGS», «+FLAGS» или «-FLAGS», необязательно с суффиксом. «SILENT».
Например, чтобы установить флаг удаления для всех сообщений:
typ, data = M.search(None, 'ALL') for num in data[0].split(): M.store(num, '+FLAGS', '\\Deleted') M.expunge()
Примечание
Создание флагов, содержащих „]“ (например: «[test]»), нарушает RFC 3501 (протокол IMAP). Однако imaplib исторически допускал создание таких тегов, а популярные IMAP-серверы, такие как Gmail, принимают и производят такие флаги. Существуют программы не-Python, которые также создают такие теги. Хотя это нарушение RFC, а клиенты и серверы IMAP должны быть строгими, imaplib, тем не менее, продолжает позволять создавать такие теги по причинам обратной совместимости, и, начиная с Python 3.6, обрабатывает их, если они отправляются с сервера, так как это улучшает реальную совместимость.
-
IMAP4.
subscribe
(mailbox)¶ Подписаться на новый почтовый ящик.
-
IMAP4.
thread
(threading_algorithm, charset, search_criterion[, ...])¶ Команда
thread
является вариантомsearch
с семантикой многопоточности для результатов. Возвращенные данные содержат список элементов поток, разделенных пробелами.Элементы потока состоят из нуля или более номеров сообщений, разделенных пробелами, что указывает на последовательные родительские и дочерние элементы.
Поток имеет два аргумента перед аргументами search_criterion; a threading_algorithm и поиск charset. Обратите внимание, что в отличие от
search
, поиск аргумент charset обязателен. Существует также командаuid thread
, которая соответствуетthread
тому, какuid search
соответствуетsearch
. Командаthread
сначала выполняет поиск в почтовом ящике сообщений, соответствующих заданным критериям поиска, используя аргумент charset для интерпретации строки в критериях поиска. Это тогда возвращает соответствующие сообщения пронизывается согласно указанному алгоритму пронизывания.Это команда расширения
IMAP4rev1
.
-
IMAP4.
uid
(command, arg[, ...])¶ Выполните команду args с сообщениями, идентифицированными UID, а не номером сообщения. Возвращает ответ, соответствующий команде. Необходимо указать хотя бы один аргумент; если они отсутствуют, сервер возвращает ошибку, и возникает исключение.
-
IMAP4.
unsubscribe
(mailbox)¶ Отписаться от старого почтового ящика.
-
IMAP4.
xatom
(name[, ...])¶ Разрешить простые команды расширения, уведомляемые сервером в ответе
CAPABILITY
.
Следующие атрибуты определены на сущности IMAP4
:
-
IMAP4.
PROTOCOL_VERSION
¶ Последний поддерживаемый протокол в ответе
CAPABILITY
от сервера.
-
IMAP4.
debug
¶ Целое число значение для управления выводом отладки. Инициализирование значение взято от переменной модуля
Debug
. Значения, превышающие три, отслеживают каждую команду.
Пример IMAP4¶
Вот минимальный пример (без проверки ошибок), который открывает почтовый ящик и извлекает и печатает все сообщения:
import getpass, imaplib
M = imaplib.IMAP4()
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
typ, data = M.fetch(num, '(RFC822)')
print('Message %s\n%s\n' % (num, data[0][1]))
M.close()
M.logout()