Год жизни с Яндекс.Почтой



Опишу свой опыт работы с Яндекс.Почтой из 1С:Документооборота. Ошибки, которые, видимо, редки и поэтому нигде не описаны, в основном побеждены и, может, мой опыт поможет кому-нибудь в его борьбе.

Глава 1. Внутренняя почта.

Моя организация использует в качестве корпоративной почты почту Яндекс с делегированием домена, а в качестве почтового клиента встроенную почту 1С:Документооборота. Настройка и тестирование почты велось в течение 2024 года на технологических платформах версий 8.3.10.2650 и 8.3.12.1685 и версиях конфигурации 2.1.11.5 и 2.1.12.2.

С настройками «из коробки» почта работала крайне плохо, часть пользователей перешла на web-доступ к Яндекс.Почте и выпали из корпоративной системы документооборота. Первое, что пришло на ум — перенастройка потоков сбора почты. По умолчанию учётные записи почты распределяется на потоки по 50 штук. Потоков всего 10, регламентные задачи «Прием отправка почты (номер потока)» запускаются каждые 30 секунд. Мне кажется это перебор и в настоящее время у хорошо себя зарекомендовали следующие настройки для 80 учётных записей: 2 потока, запуск каждый день с 7:00 по 23:00 каждые 600 секунд, завершать через 900 секунд, повторять через 600 секунд.

Но это не всё. Параметр «завершать через 900 секунд» введён потому, что почта очень глючит и может зависнуть. Почему? Не понятно. Техподдержка Яндекса отправила меня воспроизводить ошибки через «нормальный» почтовый клиент, а техподдержка 1С ткнула пальцем в ошибки TCP-пакетов в дампе WireShark и сказала, что у меня «неправильный» Интернет.

А ошибки очень занимательные.

 

 Пример ошибки

 {ОбщийМодуль.ЛегкаяПочтаСервер.Модуль(25)}: {ОбщийМодуль.Почта.Модуль(184)}: Ошибка при вызове метода контекста (Подключиться) Соединение.Подключиться(Профиль, ПротоколИнтернет); по причине: Произошла ошибка соединения с сервером при работе с IMAP. Код ошибки: 4 Ответ сервера: Yandex IMAP4rev1 at imap16j.mail.yandex.net:993 ready to talk with ::ffff:xx.xx.xx.xx:64776, 2024-Jan-02 11:10:49, mAYgYsk5YCg1

Сразу скажу, что к ошибкам протокола IMAP версии 4 этот код ошибки (а у меня было ещё 41 и 6) не имеет никакого отношения. Эти коды придуманы в 1С и они их не раскрывают (я просил). Согласно этой статьи для работы с почтовыми протоколами в 2024 году использовалась open source библиотека libetran, она поддерживается до сих пор, так что может и сейчас используется. Это делает ситуацию ещё более непонятной.

Не буду расписывать разнообразие ошибок, потому что их объединяет одно: информация об ошибке ничего не объясняет, а только запутывает, гугление приводит к единичным запросам на форумах, на которые не получены ответы.

Среди законов Мёрфи есть третий закон Финэйгла, который гласит, что в любом наборе исходных данных самая надежная величина, не требующая никакой проверки, является ошибочной. После долгих тестирований и раздумий над результатами я решил усомниться в корректности работы технологической платформы с механизмами шифрования почты. Для проверки этой крамольной мысли обратил взор на программу, которая хорошо известна нам всем. Это Stunnel.

И всё. Ошибки из массовых стали единичными.

Глава 2. Выполнение задач по почте.

Выполнение задач по почте — шикарная возможность 1С:Документооборота, которая не только позволяет сэкономить на лицензиях в ряде случаев, но и организовать удалённую работу руководителей, по согласованию документов. Однако «из коробки» она также не работает при использовании Яндекс.Почты.

Немного теории про удаление писем в протоколе IMAP. В этом протоколе для удаления письма нужно сначала его пометить на удаление, а потом удалить. Если мне память не изменяет, удаление писем должно происходить при закрытии ящика (команда CLOSE), при завершении сеанса (команда LOGOUT) и при сжатии ящика (команда EXPUNGE). Так вот сервера Яндекс.Почты удаляют письма только по команде ОчиститьУдаленныеСообщения() для объекта ИнтернетПочта (видимо это EXPUNGE), а во всех остальных случаях оставляют помеченные для удаления письма в ящике. А дальше происходит странный глюк, которого по идее быть не должно: процедура ПолучитьВходящиеСообщенияСистемнойУчетнойЗаписи общего модуля ВыполнениеЗадачПоПочтеСервер получает все письма и начинает их обработку, потом снова все и так далее. Если при обработке входящего письма происходит ошибка, то в сторону адресата уходит соответствующее письмо, что с одной стороны логично, но с другой приводит к ещё одному виду глюков, который выражается в переписке почтовых роботов.

Я написал обработку, которая имеет 2 команды:

  • автоматическая очистка почты сервера — удаление помеченных на удаление писем, период запуска равен периоду запуска регламентного задания «Выполнение задач по почте».
  • автоматическая очистка всей почты сервера — удаление всех писем, запуск ночью один раз в день.

Единственный нюанс при запуске этой обработки, нужно указать пароль к встроенной учётной записи. Мне было лень разбираться где его хранит система.

Всё, извините за небольшой сумбур и много букв. Всех с наступившим!

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *