Почему зависает регламентное задание «Получение и отправка электронных писем» в 1С и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

Каждый администратор и разработчик систем на платформе 1С:Предприятие 8.3 рано или поздно сталкивается со сбоями в работе встроенного почтового клиента. Одной из наиболее коварных и труднодиагностируемых проблем является внезапное зависание регламентного задания Получение и отправка электронных писем (в некоторых конфигурациях — ПолучениеИОтправкаЭлектронныхПисем). Особенно остро эта проблема проявляется при интеграции с почтовым сервисом Яндекс.Почта.

В этой статье мы подробно разберем, почему регламентное задание уходит в бесконечное выполнение, как локализовать ошибку, если Журнал регистрации молчит, и какие шаги необходимо предпринять для полного устранения этой проблемы.

Симптомы проблемы

Давайте проанализируем типичную картину сбоя. В консоли регламентных заданий или в обработке «Регламентные и фоновые задания» мы видим, что задание запущено и выполняется уже несколько часов подряд. При этом:

  1. В Журнале регистрации отсутствуют какие-либо ошибки. Последняя запись обычно показывает успешное изменение какого-то регистра или загрузку одного из писем, после чего наступает полная тишина.
  2. Попытка подключиться отладчиком к зависшему фоновому процессу не приносит результатов: поток исполнения зависает на низком уровне (в бинарном коде платформы) и не реагирует на точки останова.
  3. Процесс сервера 1С rphost может утилизировать значительную часть процессорного времени (до 100% одного из ядер процессора).
  4. После принудительного завершения сеанса вручную в консоли регистрируется статус «Задание завершено с ошибками», но при следующем запуске по расписанию ситуация повторяется через раз или два.

Выясним причины этого поведения и рассмотрим по шагам методы их устранения.

---

Причина 1. Зависание протокола IMAP на уровне платформы 1С

Основным виновником бесконечного ожидания ответа от почтового сервера часто становится протокол IMAP. Встроенный в платформу 1С объект ИнтернетПочта при работе по протоколу IMAP крайне чувствителен к сетевым задержкам, особенностям шифрования SSL/TLS и структуре папок на сервере Яндекса.

При определенных условиях (например, при попытке скачать письмо с некорректным MIME-заголовком или поврежденным вложением) библиотека платформы уходит в бесконечный цикл обработки сокета. Платформа просто «ждет» ответа от сервера, игнорируя стандартные системные таймауты.

Решение: Переход на протокол POP3

Практика показывает, что протокол POP3 работает в разы стабильнее во встроенном почтовом клиенте 1С, так как он устроен значительно проще и не поддерживает синхронизацию сложных структур папок. Переведем загрузку писем на POP3:

  1. Перейдем в настройки проблемной учетной записи в 1С (справочник Учетные записи электронной почты).
  2. Изменим протокол получения почты с IMAP на POP3.
  3. Укажем сервер входящей почты: pop.yandex.ru.
  4. Установим порт для безопасного соединения (SSL) — 995.
  5. Обязательно зайдем в веб-интерфейс Яндекс.Почты через браузер, перейдем в Настройки -> Все настройки -> Почтовые программы и установим флажок «Разрешить доступ к почтовому ящику с помощью портала по протоколу POP3». Без этого шага сервер Яндекса будет отклонять авторизацию.

---

Причина 2. Механизм транзакционных блокировок в регистрах БСП

В типовых конфигурациях 1С (на базе Библиотеки Стандартных Подсистем — БСП, таких как ERP, КА, УТ, CRM) реализован механизм защиты от параллельного запуска обработки одной и той же учетной записи несколькими фоновыми заданиями. Для этого используется специальный регистр сведений.

Когда регламентное задание начинает работу с конкретным почтовым ящиком, оно записывает данные этой учетной записи в регистр сведений Заблокированные для получения учетные записи (или аналогичный в вашей версии БСП). Если в процессе получения писем происходит сетевой сбой, аварийное завершение процесса rphost или принудительная остановка задания администратором, запись о блокировке остается в регистре «навечно».

При последующих запусках регламентное задание видит неудаленную блокировку и либо мгновенно завершается, либо зацикливается, пытаясь обработать «зависшую» сессию.

Решение: Очистка регистра заблокированных учетных записей

Выполним ручной сброс блокировок. Для этого нам необходимо открыть регистр сведений и удалить из него записи, препятствующие нормальной работе:

  1. Через меню «Все функции» (или «Функции для технического специалиста») найдем регистр сведений Заблокированные для получения учетные записи.
  2. Если в нем присутствуют записи с зависшими учетными записями, просто удалим их вручную.
  3. Проверим корректность логина и пароля в настройках соответствующей учетной записи электронной почты. Если пароль был изменен или заблокирован, 1С не сможет пройти авторизацию, что опять же приведет к ошибкам блокировки.

Для автоматизации этого процесса в будущем мы можем написать небольшую процедуру, очищающую устаревшие записи блокировок (например, созданные более 2 часов назад):


Процедура ОчиститьУстаревшиеБлокировкиПочты() Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Блокировки.УчетнаяЗапись КАК УчетнаяЗапись
        |ИЗ
        |	РегистрСведений.ЗаблокированныеДляПолученияУчетныеЗаписи КАК Блокировки
        |ГДЕ
        |	Блокировки.Период < &ПредельноеВремя";
    
    // Допустим, блокировка не должна висеть дольше 1 часа
    Запрос.УстановитьПараметр("ПредельноеВремя", ТекущаяДата() - 3600);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Набор = РегистрыСведений.ЗаблокированныеДляПолученияУчетныеЗаписи.СоздатьНаборЗаписей();
        Набор.Отбор.УчетнаяЗапись.Установить(Выборка.УчетнаяЗапись);
        Набор.Записать(); // Очищаем запись блокировки
        ЗаписьЖурналаРегистрации("Почта.СбросБлокировки", УровеньЖурналаРегистрации.Предупреждение, , , 
            "Сброшена зависшая блокировка для учетной записи: " + СокрЛП(Выборка.УчетнаяЗапись));
    КонецЦикла;
КонецПроцедуры

---

Причина 3. Ошибки парсера платформы при обработке «битых» писем

Иногда зависание происходит на конкретном письме. Это так называемая проблема «ядовитого письма» (MIME-бомбы или письма с битой кодировкой заголовков). Встроенный в платформу 1С почтовый парсер пытается прочитать структуру некорректно сформированного письма, уходит в рекурсивный разбор структуры вложений и зависает.

Решение: Анализ и изоляция проблемного письма

Проанализируем ситуацию и найдем то самое письмо, на котором спотыкается система:

  1. Зайдем в почтовый ящик через веб-интерфейс Яндекса.
  2. Создадим временную подпапку (например, «ВременныйАрхив»).
  3. Перенесем все непрочитанные или недавно пришедшие письма из папки «Входящие» в созданную папку.
  4. Запустим регламентное задание вручную. Если оно отработает успешно и без зависаний, значит, дело действительно в одном из этих писем.
  5. Возвращаем письма порциями по 2–3 штуки обратно во «Входящие» и запускаем задание, пока не локализуем конкретное дефектное письмо.
  6. Удаляем проблемное письмо или пересылаем его содержимое в «чистом» текстовом формате.

---

Причина 4. Проблемы сетевых таймаутов и устаревшая платформа 1С

В старых релизах платформы (включая ветку 8.3.12, на которой работал автор темы, а также в ранних релизах 8.3.13 и 8.3.14) присутствовал зарегистрированный баг работы с TLS/SSL-соединениями. Свойство Профиль.Таймаут не учитывалось платформой должным образом в процессе SSL-рукопожатия (Handshake). Если почтовый сервер Яндекса задерживал ответ на стыке сетевых пакетов, сессия 1С застывала в ожидании сокета вечно.

Решение: Обновление платформы и настройка лимитов времени

Для комплексного решения этой проблемы выполним следующие действия:

  1. Обновление платформы: Рекомендуется обновить платформу 1С:Предприятие 8.3 до актуального стабильного релиза (например, старше 8.3.15, где сетевые таймауты при работе с почтовыми объектами были существенно переработаны и исправлены).
  2. Настройка лимита времени выполнения регламентного задания: Если обновить платформу оперативно невозможно, настроим принудительное завершение зависшего потока средствами самой 1С. В консоли регламентных заданий (или в свойствах метаданных задания) установим параметр «Останавливать через» (или параметр ПределВремениВыполнения) равным 300 или 600 секунд. В этом случае кластер серверов 1С принудительно прервет зависший рабочий процесс по истечении заданного времени, освободив ресурсы сервера и позволив заданию запуститься заново по расписанию.

---

Причина 5. Изменение политики безопасности Яндекса (Пароли приложений)

Яндекс регулярно ужесточает политики безопасности для внешних почтовых клиентов. Использование основного пароля от учетной записи Яндекса в сторонних программах (включая 1С) заблокировано. При попытке авторизоваться по стандартному паролю сервер Яндекса может не просто выдать ошибку, а временно блокировать частые запросы от IP-адреса вашего сервера (срабатывает защита от подбора паролей). В этот момент регламентное задание 1С зависает на этапе ожидания авторизационного ответа от сервера.

Решение: Использование паролей приложений

Для настройки авторизации выполним следующие шаги:

  1. Авторизуемся в веб-интерфейсе Яндекс под нужной учетной записью.
  2. Перейдем в настройки Яндекс ID в раздел «Безопасность» -> «Доступ к ящику» -> «Пароли приложений».
  3. Создадим новый пароль, выбрав тип приложения «Почта».
  4. Яндекс сгенерирует уникальный 16-значный пароль (например, abcd-efgh-ijkl-mnop). Копируем его.
  5. Переходим в 1С, открываем настройки учетной записи электронной почты и вставляем скопированный код в поле «Пароль».

Этот пароль используется исключительно для доступа по протоколам POP3/IMAP/SMTP и обеспечивает стабильное прохождение авторизации без вызова блокировок со стороны защитных алгоритмов почтового сервиса.

---

Резюме и план действий

Подведем итоги нашего исследования. Если у вас зависает регламентное задание получения и отправки почты, действуйте по следующему проверенному алгоритму:

  1. Проверьте регистр Заблокированные для получения учетные записи и очистите его от старых записей.
  2. Переведите входящую почту в 1С с протокола IMAP на более стабильный POP3, не забыв включить поддержку POP3 в настройках самого ящика на Яндексе.
  3. Сгенерируйте и установите в настройках 1С специальный Пароль приложения вместо стандартного пароля от учетной записи Яндекса.
  4. Установите в свойствах регламентного задания лимит выполнения (параметр «Останавливать через») в 300–600 секунд.
  5. При возможности запланируйте обновление платформы 1С:Предприятие на актуальный релиз.

Эти несложные шаги гарантируют стабильную и бесперебойную работу почтового клиента в вашей системе, исключая зависания фоновых процессов и перегрузку серверных мощностей.

← На главную