При использовании внешней компоненты DialMail для отправки электронной почты из платформы 1С:Предприятие 7.7 разработчики нередко сталкиваются с внезапным прекращением работы почтового обмена. В журнале событий фиксируются сообщения об ошибках: «Не подключились к SSL», «SMTP ErrorCode = 10091», «SMTP ErrorDesc = Network subsystem is unusable» и «SMTP: ОШИБКА Подключиться()».
Разберем детально, почему возникает данный сбой, как правильно восстановить работоспособность компоненты и какие альтернативные способы отправки защищенной почты можно применить в среде 1С 7.7.
Проанализируем ситуацию и выделим основные технические факторы, приводящие к падению почтовой подсистемы:
libcrypto-1_1.dll и libssl-1_1.dll вместо прежних libeay32.dll и ssleay32.dll), а многие внутренние функции были удалены или переписаны. Компонента DialMail.dll жестко скомпилирована под старый интерфейс и не может обнаружить нужные точки входа, что вызывает сбой инициализации сетевой подсистемы (код 10091).Рассмотрим по шагам правильный алгоритм восстановления работы DialMail:
DialMail требуется 32-разрядная (x86) сборка OpenSSL последней ревизии ветки 1.0.2 (например, 1.0.2u). Именно эта ветка сохраняет обратную совместимость по именам файлов libeay32.dll и ssleay32.dll и при этом полностью поддерживает современный протокол TLS 1.2.libeay32.dll и ssleay32.dll в одну из следующих папок:
— В каталог C:\Windows\SysWOW64\ (для 64-разрядных версий Windows) или C:\Windows\System32\ (для 32-разрядных ОС);
— Либо непосредственно в каталог исполняемых файлов 1С 7.7 (папка BIN, где расположен 1cv7.exe);
— Лиbo в корневой каталог конкретной информационной базы.
Network subsystem is unusable сохраняется, выполним сброс каталога Winsock в командной строке от имени администратора:
netsh winsock reset
После выполнения команды обязательно перезагрузим компьютер.
Рассмотрим надежный вариант обхода ограничений устаревших компонентов с помощью локального сервиса stunnel. Этот подход полностью снимает с 1С 7.7 задачу шифрования трафика:
127.0.0.1:25) в защищенное SSL/TLS-соединение с удаленным сервером (например, smtp.yandex.ru:465).127.0.0.1, порт 25, а флаг использования SSL отключаем. Компонента DialMail передает письмо локально без шифрования, а туннель шифрует трафик по актуальным стандартам безопасности и передает на почтовый сервер.Если нет возможности использовать внешние 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();
Сообщить("Письмо успешно отправлено!");
Исключение
Сообщить("Ошибка при отправке письма: " + ОписаниеОшибки(), "!");
КонецПопытки;
Еще одним эффективным решением является вызов внешних системных утилит через команду запуска внешних приложений:
curl встроена в операционную систему и умеет работать с SMTP через SSL/TLS. 1С 7.7 формирует файл письма и запускает curl в фоновом режиме.System.Net.Mail.SmtpClient позволяет выполнить защищенную отправку, используя актуальную версию .NET Framework, установленную в системе.Важное примечание: при работе с любым современным почтовым сервисом (Яндекс, Mail.ru, Gmail) стандартный пароль от учетной записи использовать нельзя. В личном кабинете безопасности почтового провайдера необходимо предварительно создать специальный пароль приложения для протокола SMTP.