Проблема подключения почтовых сервисов к устаревшим конфигурациям, таким как 1С:Комплексная автоматизация 1.1 (КА 1.1), работающим в режиме толстого клиента, становится всё более актуальной. Современные почтовые сервера (Яндекс, Gmail, Mail.ru) давно отказались от небезопасных соединений и требуют использования протоколов TLS 1.1 или TLS 1.2. В этой статье мы разберем несколько способов решения этой задачи, начиная от штатных возможностей платформы и заканчивая обходными путями.
Первым делом проанализируем версию используемой платформы 1С. Хотя поддержка TLS для тонкого клиента появилась еще в версии 8.3.4, полноценная работа с протоколами TLS 1.1 и 1.2 для объекта ИнтернетПочта была реализована начиная с версии 8.3.8. Если ваша база запущена на платформе ниже этой версии, штатные средства 1С, скорее всего, не смогут установить защищенное соединение с современным сервером.
Разберем, как настроить профиль почты, если платформа обновлена:
ИнтернетПочтовыйПрофиль правильно указаны параметры защиты.ИспользоватьЗащищенноеСоединениеSMTP.ИспользоватьЗащищенноеСоединениеIMAP.
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 465;
// Для порта 465 обычно используется SSL, для 587 - STARTTLS (явный TLS)
Профиль.ИспользоватьЗащищенноеСоединениеSMTP = Истина;
Профиль.ТолькоЗащищеннаяАвторизацияSMTP = Ложь;
Профиль.АдресСервераIMAP = "imap.yandex.ru";
Профиль.ПортIMAP = 993;
Профиль.ИспользоватьЗащищенноеСоединениеIMAP = Истина;
Важный нюанс: обратим внимание на режим совместимости конфигурации. Если в КА 1.1 установлен режим совместимости с версиями 8.2 или ранними 8.3, платформа может игнорировать новые свойства профиля. В некоторых случаях помогает отключение режима совместимости, но это требует тщательного тестирования всей системы.
Если обновление платформы невозможно или штатные средства всё равно выдают ошибку соединения, воспользуемся проверенным методом — созданием локального туннеля через утилиту stunnel. Этот способ позволяет «обмануть» 1С: программа будет подключаться к локальному адресу без шифрования, а stunnel будет принимать этот трафик, шифровать его по протоколу TLS и отправлять на почтовый сервер.
Схема настройки выглядит следующим образом:
stunnel на компьютер с 1С или на сервер.localhost (или 127.0.0.1), а порты ставим те, которые настроили в stunnel (например, 25 и 143).Для толстого клиента на ОС Windows мы можем обойти ограничения 1С, обратившись напрямую к системным библиотекам через COM-объект. Рассмотрим пример отправки письма через CDO.Message, который гибко настраивается под требования TLS через реестр операционной системы.
Письмо = Новый COMОбъект("CDO.Message");
Конфиг = Письмо.Configuration;
Поля = Конфиг.Fields;
// Настройка параметров отправки
Схема = "http://schemas.microsoft.com/cdo/configuration/";
Поля.Item(Схема + "sendusing").Value = 2; // Port
Поля.Item(Схема + "smtpserver").Value = "smtp.mail.ru";
Поля.Item(Схема + "smptserverport").Value = 465;
Поля.Item(Схема + "smtpusessl").Value = Истина;
Поля.Item(Схема + "smtpauthenticate").Value = 1;
Поля.Item(Схема + "sendusername").Value = "login@mail.ru";
Поля.Item(Схема + "sendpassword").Value = "password";
Поля.Update();
Письмо.Subject = "Тема письма";
Письмо.From = "login@mail.ru";
Письмо.To = "dest@example.com";
Письмо.TextBody = "Текст сообщения";
Письмо.Send();
Этот метод часто оказывается более стабильным в старых конфигурациях, так как использует механизмы ОС, которые регулярно обновляются вместе с Windows.
Проанализируем еще один современный подход — использование PowerShell. Системная утилита Send-MailMessage отлично справляется с TLS 1.2. Мы можем сформировать строку команды и запустить её из 1С с помощью функции ЗапуститьПриложение().
Пример формирования команды:
Команда = "powershell -ExecutionPolicy Bypass -Command ""$secpasswd = ConvertTo-SecureString 'ПарольПриложения' -AsPlainText -Force;
$creds = New-Object System.Management.Automation.PSCredential ('vasha_pochta@mail.ru', $secpasswd);
Send-MailMessage -From 'vasha_pochta@mail.ru' -To 'komu@mail.ru' -Subject 'Заголовок' -Body 'Текст' -SmtpServer 'smtp.mail.ru' -Port 587 -UseSsl -Credential $creds""";
ЗапуститьПриложение(Команда, , Истина);
Выясним основные причины, по которым даже при правильном коде соединение может не устанавливаться:
bin\cacert.pem в каталоге установки 1С.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols.Проанализировав вышеперечисленные методы, мы видим, что даже в КА 1.1 на толстом клиенте существует множество способов наладить работу с защищенной почтой. Выбор конкретного пути зависит от возможности обновления платформы и прав доступа к настройкам операционной системы.