Получение писем по протоколу POP3

Схема получения писем с почтовых серверов, работающих по протоколу POP3, выглядит следующим образом:
  1. Задайте параметры подключения к почтовому серверу. Параметры подключения задаются с помощью конструктора:
    пер Параметры = новый ПараметрыПодключенияPop3(Сервер: Строка, 
                                                   Port: Число = 995,
                                                   Аутентификация: АутентификацияПочты,
                                                   ПараметрыЗащиты: ПараметрыЗащищенногоСоединения)
  2. Следующим шагом создайте соединение. Для создания соединения с почтовым сервером, работающим по протоколу POP3, предназначен объект СоединениеPop3. Подключение по протоколу POP3 происходит лишь к одному каталогу, который настраивается на провайдере (по умолчанию — каталог Inbox/Входящие). Чтобы создать подключение по протоколу POP3, используется конструктор:
    исп Соединение = СоединениеPop3(Параметры: ПараметрыПодключенияPop3,
                                    ОчищатьПриЗакрытииКаталога: Булево = Истина)
  3. Для поиска и выгрузки необходимых писем удобно вначале использовать поиск по заголовкам, и лишь затем выгружать само тело письма, предварительно получив его индекс из свойства заголовка. Чтобы получить заголовки писем, используйте метод СоединениеPop3.ПолучитьЗаголовкиПисем(). В метод можно передать индексы либо срез индексов писем, заголовки которых необходимо получить. Узнать количество писем в каталоге можно при помощи метода СоединениеPop3.КоличествоПисем().

    Метод СоединениеPop3.ПолучитьЗаголовкиПисем() возвращает ЧитаемыйМассив<ЗаголовкиПисьмаВСоединении>. Обратившись к свойству Заголовки элемента массива типа ЗаголовкиПисьмаВСоединении, можно получить следующую информацию о письме:
    • Важность
    • ДатаОтправления
    • ОбратныеАдреса
    • Отправитель
    • Получатели
    • ПолучателиКопии
    • ПолучателиСкрытойКопии
    • Тема

    После того как вы нашли заголовки нужных писем, можно выгрузить сами письма, получив их индекс из свойства заголовка. Для того чтобы получить индекс письма из заголовка, обратитесь к свойству Индекс объекта типа ЗаголовкиПисьмаВСоединении.

    Каждое письмо имеет индекс в каталоге. Это порядковый номер от самого старого до самого нового письма. Порядковый номер письма не меняется внутри одной сессии подключения, потому что помеченные на удаление письма не удаляются внутри сессии. Нумерация писем начинается с нуля.

    Далее передайте необходимые индексы либо срез индексов в метод СоединениеPop3.ПолучитьПисьма(), который вернет ЧитаемыйМассив<ПисьмоВСоединении>.

  4. Чтобы получить текст, вложения, а также иные атрибуты самого письма, следует использовать свойства и методы типа ПисьмоВСоединении.Письмо.
  5. После выгрузки письмо можно удалить с сервера. Для этого следует установить письму флаг НаУдаление. Письмо с таким флагом будет удалено с сервера после закрытия соединения. Для того чтобы отметить письмо на удаление, используйте метод СоединениеPop3.ОтметитьНаУдаление(Индексы: ЧитаемыйМассив<Число>, Установить: Булево = Истина), где Индексы — это массив индексов писем в каталоге, которые необходимо отметить на удаление. Получить индекс письма можно так: ПисьмоВСоединении.Индекс.

    Для POP3 значение флага от сессии к сессии не сохраняется (таким образом невозможно перезаписать письмо на сервере).

Пример приема и сохранения писем из почтового сервера, работающего по протоколу POP3:
метод СохранитьПисьмоОтДиректора()
    пер ПочтаДиректора = "dir@example.ru"

    пер Параметры = новый ПараметрыПодключенияPop3(Сервер(), Порт(), Аутентификация())
    исп Соединение = новый СоединениеPop3(Параметры, Истина)
    
    пер ВсеВходящие = Соединение.ПолучитьЗаголовкиПисем()
    пер ПисьмаОтДиректора = новый Массив<Письмо>()
         
    для ВходящееПисьмо из ВсеВходящие
        если ВходящееПисьмо.Заголовки.Отправитель! == ПочтаДиректора и ВходящееПисьмо.Заголовки.Получатели.Размер == 1
            пер Письмо = Соединение.ПолучитьПисьмо(ВходящееПисьмо.Индекс)
            ПисьмаОтДиректора.Добавить(Письмо.Письмо)
            // После закрытия соединения письма будут удалены
            Соединение.ОтметитьНаУдаление([Письмо.Индекс])
        ;
     ;
          
     пер Архив = СформироватьАрхив()       
     для ПисьмоДиректора из ПисьмаОтДиректора
         Архив.Добавить(ПисьмоДиректора.ВПоток(), ПисьмоДиректора.Тема + ПисьмоДиректора.ДатаОтправления + ".eml")
     ;
;