Как исправить ошибку DialMail «Не подключились к SSL» и SMTP ErrorCode 10091 в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При использовании внешней компоненты DialMail для отправки электронной почты из платформы 1С:Предприятие 7.7 разработчики нередко сталкиваются с внезапным прекращением работы почтового обмена. В журнале событий фиксируются сообщения об ошибках: «Не подключились к SSL», «SMTP ErrorCode = 10091», «SMTP ErrorDesc = Network subsystem is unusable» и «SMTP: ОШИБКА Подключиться()».

Разберем детально, почему возникает данный сбой, как правильно восстановить работоспособность компоненты и какие альтернативные способы отправки защищенной почты можно применить в среде 1С 7.7.

Выясним причину возникновения ошибки

Проанализируем ситуацию и выделим основные технические факторы, приводящие к падению почтовой подсистемы:

  1. Несовместимость DialMail с новыми версиями OpenSSL (ветка 1.1.x): популярная ошибка — попытка установить свежий дистрибутив OpenSSL v1.1.x. Ветка OpenSSL 1.1.x претерпела кардинальные архитектурные изменения: исполняемые библиотеки получили новые имена (libcrypto-1_1.dll и libssl-1_1.dll вместо прежних libeay32.dll и ssleay32.dll), а многие внутренние функции были удалены или переписаны. Компонента DialMail.dll жестко скомпилирована под старый интерфейс и не может обнаружить нужные точки входа, что вызывает сбой инициализации сетевой подсистемы (код 10091).
  2. Отключение старых протоколов шифрования почтовыми серверами: современные почтовые сервисы (Яндекс, Mail.ru, Google и др.) принудительно отключили поддержку устаревших протоколов SSL v2/v3, TLS 1.0 и TLS 1.1. Для успешного соединения требуется обязательная поддержка TLS 1.2. Если используются слишком старые библиотеки (например, ветки OpenSSL 0.9.x), сервер не сможет завершить процедуру согласования ключей (SSL Handshake).
  3. Разрядность операционной системы и расположение библиотек: платформа 1С 7.7 является строго 32-разрядным (x86) приложением. При работе в 64-битных версиях Windows системные 32-битные библиотеки должны быть расположены в корректных каталогах, иначе приложение не сможет получить к ним доступ.

Способ 1. Установка совместимых библиотек OpenSSL ветки 1.0.2

Рассмотрим по шагам правильный алгоритм восстановления работы DialMail:

  1. Удалим несовместимые версии OpenSSL: если в системе были установлены пакеты OpenSSL ветки 1.1.x или выше, удалим их через панель управления или вручную удалим новые библиотеки из путей поиска.
  2. Подберем совместимый релиз OpenSSL: для работы DialMail требуется 32-разрядная (x86) сборка OpenSSL последней ревизии ветки 1.0.2 (например, 1.0.2u). Именно эта ветка сохраняет обратную совместимость по именам файлов libeay32.dll и ssleay32.dll и при этом полностью поддерживает современный протокол TLS 1.2.
  3. Разместим файлы библиотек в нужных директориях: скопируем файлы libeay32.dll и ssleay32.dll в одну из следующих папок:

    — В каталог C:\Windows\SysWOW64\ (для 64-разрядных версий Windows) или C:\Windows\System32\ (для 32-разрядных ОС);

    — Либо непосредственно в каталог исполняемых файлов 1С 7.7 (папка BIN, где расположен 1cv7.exe);

    — Лиbo в корневой каталог конкретной информационной базы.

  4. Сбросим параметры сетевого интерфейса при необходимости: если ошибка Network subsystem is unusable сохраняется, выполним сброс каталога Winsock в командной строке от имени администратора: netsh winsock reset

    После выполнения команды обязательно перезагрузим компьютер.

Способ 2. Использование локального шифрующего туннеля (stunnel)

Рассмотрим надежный вариант обхода ограничений устаревших компонентов с помощью локального сервиса stunnel. Этот подход полностью снимает с 1С 7.7 задачу шифрования трафика:

  1. Устанавливаем и настраиваем утилиту stunnel в качестве службы Windows.
  2. В конфигурационном файле туннеля настраиваем проброс входящих незащищенных соединений на локальном порту (например, 127.0.0.1:25) в защищенное SSL/TLS-соединение с удаленным сервером (например, smtp.yandex.ru:465).
  3. В коде 1С перенастраиваем параметры подключения: в качестве SMTP-сервера указываем 127.0.0.1, порт 25, а флаг использования SSL отключаем. Компонента DialMail передает письмо локально без шифрования, а туннель шифрует трафик по актуальным стандартам безопасности и передает на почтовый сервер.

Способ 3. Переход на системный объект CDO.Message

Если нет возможности использовать внешние DLL-компоненты, проанализируем использование штатного COM-объекта операционной системы Windows — CDO.Message. Он использует встроенные механизмы безопасности Windows Schannel и поддерживает современные протоколы шифрования.

Посмотрим на пример программного кода на языке 1С 7.7:


Письмо = СоздатьОбъект("CDO.Message");
Конфигурация = Письмо.Configuration;
Поля = Конфигурация.Fields;

Схема = "http://schemas.microsoft.com/cdo/configuration/";
Поля.Item(Схема + "sendusing").Value = 2; // cdoSendUsingPort
Поля.Item(Схема + "smtpserver").Value = "smtp.yandex.ru";
Поля.Item(Схема + "smtpserverport").Value = 465;
Поля.Item(Схема + "smtpusessl").Value = 1; // Использовать SSL
Поля.Item(Схема + "smtpauthenticate").Value = 1; // cdoBasic (базовая аутентификация)
Поля.Item(Схема + "sendusername").Value = "user@yandex.ru";
Поля.Item(Схема + "sendpassword").Value = "ПарольПриложения";
Поля.Update();

Письмо.From = "user@yandex.ru";
Письмо.To = "client@domain.ru";
Письмо.Subject = "Тема сообщения";
Письмо.TextBody = "Текст письма из 1С 7.7";

Попытка
    Письмо.Send();
    Сообщить("Письмо успешно отправлено!");
Исключение
    Сообщить("Ошибка при отправке письма: " + ОписаниеОшибки(), "!");
КонецПопытки;

Способ 4. Использование внешних утилит командной строки и PowerShell

Еще одним эффективным решением является вызов внешних системных утилит через команду запуска внешних приложений:

  1. Использование утилиты curl: начиная с современных сборок Windows 10/11 и Windows Server, утилита curl встроена в операционную систему и умеет работать с SMTP через SSL/TLS. 1С 7.7 формирует файл письма и запускает curl в фоновом режиме.
  2. Сценарии PowerShell: вызов скрипта PowerShell или системных классов System.Net.Mail.SmtpClient позволяет выполнить защищенную отправку, используя актуальную версию .NET Framework, установленную в системе.

Важное примечание: при работе с любым современным почтовым сервисом (Яндекс, Mail.ru, Gmail) стандартный пароль от учетной записи использовать нельзя. В личном кабинете безопасности почтового провайдера необходимо предварительно создать специальный пароль приложения для протокола SMTP.

← На главную