Получение писем по протоколу POP3
Схема получения писем по протоколу POP3
Схема получения писем с почтовых серверов, работающих по протоколу POP3, выглядит следующим образом:
-
Задайте параметры подключения к почтовому серверу. Параметры подключения задаются с помощью конструктора:
пер Параметры = новый ПараметрыПодключенияPop3(Сервер: Строка,
Port: Число = 995,
Аутентификация: АутентификацияПочты,
ПараметрыЗащиты: ПараметрыЗащищенногоСоединения) -
Следующим шагом создайте соединение. Для создания соединения с почтовым сервером, работающим по протоколу POP3, предназначен объект СоединениеPop3. Подключение по протоколу POP3 происходит лишь к одному каталогу, который настраивается на провайдере (по умолчанию — каталог Inbox/Входящие). Чтобы создать подключение по протоколу POP3, используется конструктор:
исп Соединение = СоединениеPop3(Параметры: ПараметрыПодключенияPop3,
ОчищатьПриЗакрытииКаталога: Булево = Истина) -
Для поиска и выгрузки необходимых писем удобно вначале использовать поиск по заголовкам, и лишь затем выгружать само тело письма, предварительно получив его индекс из свойства заголовка. Чтобы получить з аголовки писем, используйте метод
СоединениеPop3.ПолучитьЗаголовкиПисем()
. В метод можно передать индексы либо срез индексов писем, заголовки которых необходимо получить. Узнать количество писем в каталоге можно при помощи методаСоединениеPop3.КоличествоПисем()
.Метод
СоединениеPop3.ПолучитьЗаголовкиПисем()
возвращаетЧитаемыйМассив<ЗаголовкиПисьмаВСоединении>
. Обратившись к свойствуЗаголовки
элемента массива типаЗаголовкиПисьмаВСоединении
, можно получить следующую информацию о письме:- Важность
- ДатаОтправления
- ОбратныеАдреса
- Отправитель
- Получатели
- ПолучателиКопии
- ПолучателиСкрытойКопии
- Тема
После того как вы нашли заголовки нужных писем, можно выгрузить сами письма, получив их индекс из свойства заголовка. Для того чтобы получить индекс письма из заголовка, обратитесь к свойству
Индекс
объекта типаЗаголовкиПисьмаВСоединении
.
Каждое письмо имеет индекс в каталоге. Это порядковый номер от самого старого до самого нового письма. Порядковый номер письма не меняется внутри одной с ессии подключения, потому что помеченные на удаление письма не удаляются внутри сессии. Нумерация писем начинается с нуля.
Далее передайте необходимые индексы либо срез индексов в метод
СоединениеPop3.ПолучитьПисьма()
, который вернетЧитаемыйМассив<ПисьмоВСоединении>
. -
Чтобы получить текст, вложения, а также иные атрибуты самого письма, следует использовать свойства и методы типа
ПисьмоВСоединении.Письмо
. -
После выгрузки письмо можно удалить с сервера. Для этого следует установить письму флаг
НаУдаление
. Письмо с таким флагом будет удалено с сервера после закрытия соединения. Для того чтобы отметить письмо на удаление, используйте методСоединениеPop3.ОтметитьНаУдаление(Индексы: ЧитаемыйМассив<Число>, Установить: Булево = Истина)
, гдеИндексы
— это массив индексов писем в каталоге, которые необходимо отметить на удаление. Получить индекс письма можно так:ПисьмоВСоединении.Индекс
.Для POP3 значение флага от сессии к сессии не сохраняется (таким образом невозможно перезаписать письмо на сервере).
Пример
Пример приема и сохранения писем из почтового сервера, работающего по протоколу POP3:
метод СохранитьПисьмоОтДиректора()
пер ПочтаДиректора = "dir@example.ru"
пер Параметры = новый ПараметрыПодключенияPop3(Сервер(), Порт(), Аутентификация())
исп Соединение = новый СоединениеPop3(Параметры, Истина)
пер ВсеВходящие = Соединение.ПолучитьЗаголовкиПисем()
пер ПисьмаОтДиректора = новый Массив<Письмо>()
для ВходящееПисьмо из ВсеВходящие
е сли ВходящееПисьмо.Заголовки.Отправитель! == ПочтаДиректора и ВходящееПисьмо.Заголовки.Получатели.Размер == 1
пер Письмо = Соединение.ПолучитьПисьмо(ВходящееПисьмо.Индекс)
ПисьмаОтДиректора.Добавить(Письмо.Письмо)
// После закрытия соединения письма будут удалены
Соединение.ПометитьНаУдаление([Письмо.Индекс])
;
;
пер Архив = СформироватьАрхив()
для ПисьмоДиректора из ПисьмаОтДиректора
Архив.Добавить(ПисьмоДиректора.ВПоток(), ПисьмоДиректора.Тема + ПисьмоДиректора.ДатаОтправления + ".eml")
;
;