Получение писем по протоколу IMAP
Одна из основных особенностей взаимодействия с почтовым сервером по протоколу IMAP состоит в том, что в IMAP поддерживается возможность работы с различными каталогами, в то время как при взаимодействии по протоколу POP3 работа возможна лишь с одним каталогом.
Схема получения писем по протоколу IMAP
Схема получения писем с почтовых серверов, работающих по протоколу IMAP, выглядит следующим образом:
-
Задайте параметры подключения к почтовому серверу. Параметры подключения задаются с помощью конструктора:
пер Параметры = новый ПараметрыПодключенияImap(Сервер = "Сервер",
Порт = 993,
Аутентификация = АутентификацияПочты,
ПараметрыЗащиты = ПараметрыЗащищенногоСоединения) -
Следующим шагом создайте соединение. Для создания соединения с почтовым сервером, работающим по протоколу IMAP, предназначен объект СоединениеImap. Чтобы создать подключение по протоколу IMAP, используется конструктор:
исп Соединение = СоединениеImap(Параметры = ПараметрыПодключенияImap,
ОчищатьПриЗакрытииКаталога = Истина) -
Протокол IMAP позволяет работать с различными каталогами, расположенными на почтовом сервере. Поэтому следующим шагом следует получить нужный каталог и открыть его. Чтобы получить каталог с письмами/каталогами по имени, следует использовать метод
ПолучитьКаталог(Имя: ВидКаталогаПочты|Строка)
. Наименования одного и того же каталога могут отличаться на различных почтовых серверах. Например, каталог с черновиками может иметь как наименование «Черновики», так и «Draft», «Drafts» или иное (при запросеВидКаталогаПочты.Черновики
на сервер будет отправлена строка «Drafts»).Полученный каталог не обязательно существует физически. Чтобы проверить физическое существование каталога, следует вызвать метод
КаталогПочтыImap.Существует()
.Затем полученный каталог следует открыть, используя метод
КаталогПочтыImap.Открыть()
. Открывать каталог можно как в режимеЧтение
, так и в режимеЧтениеИЗапись
. -
Следующим шагом можно получить письма из открытого каталога. Метод
КаталогПочтыImap.ПолучитьПисьма()
вернет массив объектов типаПисьмоВСоединенииImap
. Чтобы получить текст, вложения, важность, а также иные атрибуты самого письма, следует использовать свойства и методы типаПисьмоВСоединенииImap.Письмо
.Для поиска и выгрузки необходимых писем также удобно вначале использовать поиск по заголовкам, и лишь затем выгружать само тело письма, предварительно получив его индекс из свойства заголовка. Заголовки хранят такую метаинформацию, как:
- Важность
- ДатаОтправления
- ОбратныеАдреса
- Отправитель
- Получатели
- ПолучателиКопии
- ПолучателиСкрытойКопии
- Тема
Чтобы получить заголовки писем, используйте метод
КаталогПочтыImap.ПолучитьЗаголовкиПисем()
. Метод возвращаетЧитаемыйМассив<ЗаголовкиПисьмаВСоединенииImap>
. Затем обратитесь к свойствуЗаголовки
элемента массива типаЗаголовкиПисьмаВСоединенииImap
. -
После того как вы нашли заголовки нужных писем, можно выгрузить сами письма, получив их UID либо индекс из свойства заголовка. Для того чтобы получить UID письма из заголовка, обратитесь к свойству
Uid
объекта типаЗаголовкиПисьмаВСоединенииImap
.UID — это уникальное для письма число внутри каталога, которое монотонно (по времени) возрастает от старого письма к новому. В отличии от индекса, значение не обязательно непрерывное. Значение не меняется внутри сессии, а также почтовым серверам рекомендовано не менять данное значение между сессиями. У каталогов также есть свой уникальный идентификатор — UIDVALIDITY. При этом индекс письма может не совпадать с UID того же самого письма.
Далее передайте массив UID в метод
КаталогПочтыImap.НайтиПисьмаПоUid()
. -
Для письма можно установить один или несколько флагов:
- Новое
- Отвеченное
- Отмененное
- Пересланное
- Помеченное
- Прочитанное
- Удаленное
- Черновик
Чтобы удалить письмо, установите ему флаг
Удаленное
. Далее можно вызвать методКаталогПочтыImap.ОчиститьУдаленные()
для удаления писем. Данный метод навсегда удаляет письма, помеченные на удаление. После удаления писем из каталога, индексы оставшихся в каталоге писем изменятся, однако их UID останется прежним.
Письма, помеченные флагом
Удаленное
, будут удалены автоматически после закрытия соединения, если свойствоСоединениеImap.ОчищатьПриЗакрытииКаталога
равняетсяИстина
.Установить флаги можно, передав массив UID писем и необходимые флаги в метод
КаталогПочтыImap.УстановитьФлагиПоUid()
.