Многие пользователи 1С:Предприятие 8.3, в частности конфигурации Управление торговлей 11, сталкиваются с неприятной проблемой: регламентные задания по отправке и получению электронных писем через Яндекс.Почту периодически зависают. Это может проявляться в необходимости вручную удалять заблокированную почту из регистра и "убивать" зависшие регламентные задания. При этом, если запускать отправку или получение писем вручную, всё работает корректно. Давайте разберем эту проблему и найдем пути её решения.
Мы имеем дело с конфигурацией Управление торговлей, редакция 11 (11.4.13.209), работающей на платформе 1С:Предприятие 8.3 (8.3.19.1229). Настройки почтовой учетной записи для Яндекс.Почты используются следующие:
pop.yandex.ru, порт 995, протокол SSL.smtp.yandex.ru, порт 465, протокол SSL.Основная сложность заключается в том, что регламентные задания, работающие в фоновом режиме, испытывают трудности с подключением и обменом данными с серверами Яндекса, тогда как интерактивный режим (запуск вручную) функционирует без сбоев. Это указывает на возможные проблемы с обработкой SSL-соединений или таймаутами в контексте серверных процессов 1С, а также на особенности взаимодействия с конкретными почтовыми серверами.
Один из самых эффективных и подтвержденных на практике способов решения данной проблемы является использование утилиты stunnel. Давайте подробнее рассмотрим, что это за инструмент и как он помогает в нашей ситуации.
Что такое `stunnel`?
stunnel – это универсальный прокси-сервер, который позволяет добавлять функциональность SSL/TLS к клиентам или серверам, которые изначально её не поддерживают. В нашем случае, он выступает в роли посредника, который принимает незашифрованное соединение от 1С (или соединение, которое 1С считает незашифрованным) на локальном порту и устанавливает защищенное SSL/TLS-соединение с реальным почтовым сервером Яндекса. Это помогает обойти потенциальные проблемы с нативной реализацией SSL/TLS в платформе 1С при работе с конкретными почтовыми сервисами, такими как Яндекс.
Принцип работы и преимущества:
Мы устанавливаем stunnel на том же сервере, где работает 1С-сервер или на машине, где запускается регламентное задание. stunnel будет "слушать" на определенных локальных портах (например, 110 для POP3 и 25 для SMTP). Когда 1С пытается подключиться к почтовому серверу Яндекса, мы настраиваем её так, чтобы она подключалась не к pop.yandex.ru:995 или smtp.yandex.ru:465, а к локальному адресу 127.0.0.1 и порту, который слушает stunnel. stunnel, в свою очередь, перехватывает это подключение, устанавливает собственное зашифрованное соединение с серверами Яндекса и передает данные. Таким образом, 1С взаимодействует с stunnel как с обычным (не SSL) почтовым сервером, а всю сложную работу по обеспечению безопасности и стабильности соединения берет на себя stunnel.
Это решение подтверждено опытом других пользователей 1С на конфигурациях, схожих с УТ 11, таких как 1С:Комплексная автоматизация 2.4 и 1С:CRM, что указывает на его применимость и для нашей ситуации.
Шаги по настройке `stunnel`:
stunnel с официального сайта и установите его на сервер, где работает 1С или где выполняется регламентное задание.stunnel.conf (обычно находится в папке установки stunnel) и добавьте или отредактируйте секции для POP3 и SMTP. Приведем пример настройки:
; Пример для POP3
[pop3s]
client = yes
accept = 127.0.0.1:110 ; Локальный IP-адрес и порт, к которому будет подключаться 1С
connect = pop.yandex.ru:995 ; Реальный адрес и порт сервера Яндекса
; Пример для SMTP
[smtps]
client = yes
accept = 127.0.0.1:25 ; Локальный IP-адрес и порт, к которому будет подключаться 1С
connect = smtp.yandex.ru:465 ; Реальный адрес и порт сервера Яндекса
Обратите внимание, что в примере мы используем стандартные порты 110 для POP3 и 25 для SMTP, которые 1С обычно ассоциирует с незашифрованными соединениями. Вы можете выбрать любые свободные локальные порты.
stunnel как системную службу. Это обеспечит его автоматический запуск при старте сервера и постоянную работу в фоновом режиме.pop.yandex.ru:995 укажите 127.0.0.1:110 (или тот порт, который вы указали в accept для POP3 в stunnel.conf). Обязательно снимите флажок "Использовать SSL" или аналогичную опцию, так как SSL-соединение будет устанавливать stunnel.smtp.yandex.ru:465 укажите 127.0.0.1:25 (или порт, указанный в accept для SMTP в stunnel.conf). Также снимите флажок "Использовать SSL".stunnel без изменений.После выполнения этих шагов перезапустите регламентные задания по работе с почтой и проверьте их стабильность. В большинстве случаев использование stunnel значительно улучшает надежность соединений с почтовыми серверами, особенно с теми, которые имеют строгие требования к безопасности и реализации SSL/TLS.
Даже при использовании stunnel или при попытке наладить прямое соединение, очень важно правильно настроить параметры безопасности на стороне Яндекс.Почты, а также убедиться в корректности базовых настроек в 1С. Часто именно здесь кроется причина ошибок авторизации и нестабильной работы.
Яндекс, как и многие другие крупные почтовые сервисы, требует использования специальных "паролей приложений" для сторонних программ, таких как 1С. Это 16-символьный пароль, который генерируется отдельно от вашего основного пароля учетной записи. Использование обычного пароля может приводить к ошибкам авторизации, таким как "SMTP error code 535 5.7.8 Error: authentication failed" или "LOGIN invalid credentials".
Как создать пароль приложения:
На стороне Яндекс.Почты необходимо явно разрешить доступ к почтовому ящику через сторонние почтовые программы. Без этого разрешения 1С не сможет подключиться, даже с правильными паролями.
Как разрешить доступ:
Убедитесь, что в настройках 1С (если вы не используете stunnel) и в вашей конфигурации stunnel используются корректные протоколы и порты для серверов Яндекса:
pop.yandex.ru, порт 995, требуется SSL.imap.yandex.ru, порт 993, требуется SSL/TLS.smtp.yandex.ru, порт 465, требуется SSL. Некоторые источники также указывают порт 587 для SMTP с использованием STARTTLS, однако для максимальной надежности и безопасности рекомендуется использовать SSL на порту 465.В процессе диагностики мы всегда стремимся понять, на каком этапе происходит сбой. Участник форума предпринял попытку установить таймаут и добавить логирование в коде 1С. Этот подход является правильным для локализации проблемы, хотя и не всегда решает её кардинально.
Установка таймаута:
В общем модуле УправлениеЭлектроннойПочтой, в функции ПолучитьПисьма (или аналогичной, отвечающей за подключение), можно принудительно установить свойство Таймаут для объекта ИнтернетПочтаПрофиль:
Профиль.Таймаут = 10; // Устанавливаем таймаут в 10 секунд
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Информация, , ,
НСтр("ru = 'Пользователь "+ДанныеУчетнойЗаписи.АдресЭлектроннойПочты+" 1.1'", ОбщегоНазначения.КодОсновногоЯзыка()));
Протокол = ПротоколИнтернетПочты.POP3;
Если ДанныеУчетнойЗаписи.ПротоколВходящейПочты = "IMAP" Тогда
Протокол = ПротоколИнтернетПочты.IMAP;
КонецЕсли;
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль, Протокол);
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Информация, , ,
НСтр("ru = 'Пользователь "+ДанныеУчетнойЗаписи.АдресЭлектроннойПочты+" 1.3'", ОбщегоНазначения.КодОсновногоЯзыка()));
Исключение
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Ошибка, , ,
НСтр("ru = 'Пользователь "+ДанныеУчетнойЗаписи.АдресЭлектроннойПочты+" 1.4"+ИнформацияОбОшибке()+"'", ОбщегоНазначения.КодОсновногоЯзыка()));
КонецПопытки;
Как мы видим из сообщения автора, даже при принудительной установке таймаута подключение всё равно может зависать или выдавать ошибку через раз. Это свидетельствует о том, что проблема может быть глубже, чем просто задержки в ответе сервера. Возможно, происходит полный обрыв или некорректное завершение SSL-рукопожатия, и даже таймаут не помогает корректно закрыть соединение или дождаться его установления.
Важность логирования:
Добавление записей в Журнал регистрации 1С до и после попытки подключения (как показано в приведенном коде, например, с метками "1.1", "1.3", "1.4") позволяет нам точно определить, на каком шаге происходит сбой. Если мы видим запись "1.1", но не видим ни "1.3", ни "1.4", это означает, что зависание происходит непосредственно на строке Почта.Подключиться(Профиль, Протокол);. Эта информация критически важна для дальнейшей диагностики, особенно если мы не используем stunnel.
Для полного понимания ситуации и обеспечения стабильной работы почты в 1С, давайте рассмотрим дополнительные факторы, которые могут влиять на процесс.
Вопрос о количестве писем, проходящих через сервер Яндекса, не случаен. Большой объем входящих писем, особенно с крупными вложениями, или очень частые попытки подключения регламентного задания могут создавать значительную нагрузку. Яндекс может временно ограничивать скорость или частоту соединений с одного IP-адреса, что проявляется в зависаниях.
Необходимо тщательно проверить сетевые настройки на сервере 1С, а также на уровне корпоративных фаерволлов и маршрутизаторов. Убедитесь, что исходящие соединения на порты 995 (POP3) и 465 (SMTP) к серверам Яндекса не блокируются и не ограничиваются. Если используется stunnel, проверьте доступность локальных портов, которые он прослушивает.
Проверьте состояние регламентного задания "Получение и отправка электронных писем". В Консоли заданий или в разделе "Администрирование" -> "Обслуживание" -> "Регламентные и фоновые задания" убедитесь, что оно включено, имеет корректное расписание и не находится в состоянии "Заблокировано". Если оно заблокировано, разблокируйте его. Иногда регламентные задания могут "зависать" в процессе выполнения и не завершаться, что требует принудительной отмены и повторного запуска.
Всегда рекомендуется использовать актуальные версии платформы 1С:Предприятие и конфигурации. Разработчики постоянно выпускают обновления, которые содержат исправления ошибок, в том числе связанных с работой внешних сервисов и сетевым взаимодействием. Возможно, в вашей версии платформы или конфигурации присутствуют известные баги, влияющие на работу почтового клиента.
Общая производительность сервера, на котором развернут 1С:Предприятие, также может играть роль. Нехватка оперативной памяти, высокая загрузка процессора, медленная работа дисковой подсистемы, или некорректная настройка СУБД (например, PostgreSQL) могут замедлять выполнение регламентных заданий и приводить к таймаутам.
Помимо добавленных нами отладочных записей, регулярно просматривайте стандартный Журнал регистрации 1С. Фильтруйте события по типу "Ошибка" и по источнику, связанному с почтой. Это может выявить другие, не очевидные причины сбоев.
Для диагностики можно временно изменить персональные настройки пользователя, который отправляет письма. В разделе "Органайзер" -> "Взаимодействия" -> "Все действия" -> "Персональные настройки" -> "Прочее" можно установить флажок "Отправлять письма сразу". Это позволит проверить работоспособность отправки писем вне контекста регламентных заданий и быстрее получать обратную связь об ошибках.
Решение проблемы зависания почты в 1С при работе с Яндекс.Почтой чаще всего требует комплексного подхода. Мы настоятельно рекомендуем начать с проверки настроек безопасности на стороне Яндекса (пароли приложений и разрешение доступа), а затем рассмотреть внедрение stunnel, который зарекомендовал себя как надежное средство для стабилизации соединений. Одновременно не забывайте про диагностику с помощью логирования и анализ общих параметров работы вашей системы 1С.