Каждый администратор и разработчик систем на платформе 1С:Предприятие 8.3 рано или поздно сталкивается со сбоями в работе встроенного почтового клиента. Одной из наиболее коварных и труднодиагностируемых проблем является внезапное зависание регламентного задания Получение и отправка электронных писем (в некоторых конфигурациях — ПолучениеИОтправкаЭлектронныхПисем). Особенно остро эта проблема проявляется при интеграции с почтовым сервисом Яндекс.Почта.
В этой статье мы подробно разберем, почему регламентное задание уходит в бесконечное выполнение, как локализовать ошибку, если Журнал регистрации молчит, и какие шаги необходимо предпринять для полного устранения этой проблемы.
Давайте проанализируем типичную картину сбоя. В консоли регламентных заданий или в обработке «Регламентные и фоновые задания» мы видим, что задание запущено и выполняется уже несколько часов подряд. При этом:
rphost может утилизировать значительную часть процессорного времени (до 100% одного из ядер процессора).Выясним причины этого поведения и рассмотрим по шагам методы их устранения.
---
Основным виновником бесконечного ожидания ответа от почтового сервера часто становится протокол IMAP. Встроенный в платформу 1С объект ИнтернетПочта при работе по протоколу IMAP крайне чувствителен к сетевым задержкам, особенностям шифрования SSL/TLS и структуре папок на сервере Яндекса.
При определенных условиях (например, при попытке скачать письмо с некорректным MIME-заголовком или поврежденным вложением) библиотека платформы уходит в бесконечный цикл обработки сокета. Платформа просто «ждет» ответа от сервера, игнорируя стандартные системные таймауты.
Решение: Переход на протокол POP3
Практика показывает, что протокол POP3 работает в разы стабильнее во встроенном почтовом клиенте 1С, так как он устроен значительно проще и не поддерживает синхронизацию сложных структур папок. Переведем загрузку писем на POP3:
Учетные записи электронной почты).pop.yandex.ru.995.---
В типовых конфигурациях 1С (на базе Библиотеки Стандартных Подсистем — БСП, таких как ERP, КА, УТ, CRM) реализован механизм защиты от параллельного запуска обработки одной и той же учетной записи несколькими фоновыми заданиями. Для этого используется специальный регистр сведений.
Когда регламентное задание начинает работу с конкретным почтовым ящиком, оно записывает данные этой учетной записи в регистр сведений Заблокированные для получения учетные записи (или аналогичный в вашей версии БСП). Если в процессе получения писем происходит сетевой сбой, аварийное завершение процесса rphost или принудительная остановка задания администратором, запись о блокировке остается в регистре «навечно».
При последующих запусках регламентное задание видит неудаленную блокировку и либо мгновенно завершается, либо зацикливается, пытаясь обработать «зависшую» сессию.
Решение: Очистка регистра заблокированных учетных записей
Выполним ручной сброс блокировок. Для этого нам необходимо открыть регистр сведений и удалить из него записи, препятствующие нормальной работе:
Заблокированные для получения учетные записи.Для автоматизации этого процесса в будущем мы можем написать небольшую процедуру, очищающую устаревшие записи блокировок (например, созданные более 2 часов назад):
Процедура ОчиститьУстаревшиеБлокировкиПочты() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Блокировки.УчетнаяЗапись КАК УчетнаяЗапись
|ИЗ
| РегистрСведений.ЗаблокированныеДляПолученияУчетныеЗаписи КАК Блокировки
|ГДЕ
| Блокировки.Период < &ПредельноеВремя";
// Допустим, блокировка не должна висеть дольше 1 часа
Запрос.УстановитьПараметр("ПредельноеВремя", ТекущаяДата() - 3600);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Набор = РегистрыСведений.ЗаблокированныеДляПолученияУчетныеЗаписи.СоздатьНаборЗаписей();
Набор.Отбор.УчетнаяЗапись.Установить(Выборка.УчетнаяЗапись);
Набор.Записать(); // Очищаем запись блокировки
ЗаписьЖурналаРегистрации("Почта.СбросБлокировки", УровеньЖурналаРегистрации.Предупреждение, , ,
"Сброшена зависшая блокировка для учетной записи: " + СокрЛП(Выборка.УчетнаяЗапись));
КонецЦикла;
КонецПроцедуры
---
Иногда зависание происходит на конкретном письме. Это так называемая проблема «ядовитого письма» (MIME-бомбы или письма с битой кодировкой заголовков). Встроенный в платформу 1С почтовый парсер пытается прочитать структуру некорректно сформированного письма, уходит в рекурсивный разбор структуры вложений и зависает.
Решение: Анализ и изоляция проблемного письма
Проанализируем ситуацию и найдем то самое письмо, на котором спотыкается система:
---
В старых релизах платформы (включая ветку 8.3.12, на которой работал автор темы, а также в ранних релизах 8.3.13 и 8.3.14) присутствовал зарегистрированный баг работы с TLS/SSL-соединениями. Свойство Профиль.Таймаут не учитывалось платформой должным образом в процессе SSL-рукопожатия (Handshake). Если почтовый сервер Яндекса задерживал ответ на стыке сетевых пакетов, сессия 1С застывала в ожидании сокета вечно.
Решение: Обновление платформы и настройка лимитов времени
Для комплексного решения этой проблемы выполним следующие действия:
8.3.15, где сетевые таймауты при работе с почтовыми объектами были существенно переработаны и исправлены).ПределВремениВыполнения) равным 300 или 600 секунд. В этом случае кластер серверов 1С принудительно прервет зависший рабочий процесс по истечении заданного времени, освободив ресурсы сервера и позволив заданию запуститься заново по расписанию.---
Яндекс регулярно ужесточает политики безопасности для внешних почтовых клиентов. Использование основного пароля от учетной записи Яндекса в сторонних программах (включая 1С) заблокировано. При попытке авторизоваться по стандартному паролю сервер Яндекса может не просто выдать ошибку, а временно блокировать частые запросы от IP-адреса вашего сервера (срабатывает защита от подбора паролей). В этот момент регламентное задание 1С зависает на этапе ожидания авторизационного ответа от сервера.
Решение: Использование паролей приложений
Для настройки авторизации выполним следующие шаги:
abcd-efgh-ijkl-mnop). Копируем его.Этот пароль используется исключительно для доступа по протоколам POP3/IMAP/SMTP и обеспечивает стабильное прохождение авторизации без вызова блокировок со стороны защитных алгоритмов почтового сервиса.
---
Подведем итоги нашего исследования. Если у вас зависает регламентное задание получения и отправки почты, действуйте по следующему проверенному алгоритму:
Заблокированные для получения учетные записи и очистите его от старых записей.Эти несложные шаги гарантируют стабильную и бесперебойную работу почтового клиента в вашей системе, исключая зависания фоновых процессов и перегрузку серверных мощностей.