Как настроить отправку почты из 1С 8.1 с использованием защищенного соединения SSL

Программист 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При попытке адаптировать современный код отправки почты из платформы 1С:Предприятие 8.3 для работы в устаревшей версии 1С 8.1 разработчики сталкиваются с непреодолимыми синтаксическими и платформенными ограничениями. Разберем причины возникновения таких ошибок, проанализируем ограничения платформы 1С 8.1 и рассмотрим все рабочие варианты организации отправки электронной почты через современные защищенные почтовые сервисы (Yandex, Mail.ru, Gmail).

Посмотрим на типовой пример кода, который отлично работает на платформе 8.3:


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.АдресСервераIMAP = "imap.yandex.ru";
Профиль.ПортIMAP = 993;
Профиль.ПортSMTP = 587;
Профиль.Таймаут = 15;
Профиль.ИспользоватьSSLIMAP = Истина;
Профиль.ПользовательSMTP = "mail@mail.ru";
Профиль.ПользовательIMAP = "mail@mail.ru";
Профиль.ПарольIMAP = "секретный_пароль";
Профиль.ПарольSMTP = "секретный_пароль";

Почта = Новый ИнтернетПочта;
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Тема = "СООБЩЕНИЕ_ОБМЕНА";
Сообщение.Отправитель = "mail@mail.ru";
Текст = Сообщение.Тексты.Добавить("Привет, мир!");
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
Сообщение.Получатели.Добавить("recipient@yandex.ru");

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

Почему данный код не работает в платформе 1С 8.1

Выясним причину ошибки при запуске подобного кода в 1С 8.1. Встроенный объект ИнтернетПочтовыйПрофиль в версии 8.1 физически не содержит свойств для защищенного соединения, таких как ИспользоватьSSLSMTP, ИспользоватьSSLIMAP, ИспользоватьSSLPOP3, а также свойств для работы по протоколу IMAP (например, АдресСервераIMAP, ПортIMAP). Полноценная поддержка шифрования SSL/TLS и протокола IMAP появилась только в платформе 8.2 (начиная с релиза 8.2.14) и 8.3.

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

Кроме того, если просто запустить конфигурацию на платформе 8.3, но оставить режим совместимости «Версия 8.1», новые свойства и методы все равно будут недоступны, так как платформа будет строго эмулировать синтаксические ограничения версии 8.1.

Разберем подробнее практические способы решения этой проблемы.

Способ 1. Отправка писем через системный COM-объект CDO.Message

Проанализируем наиболее простое и надежное программное решение внутри среды Windows без установки стороннего программного обеспечения. Мы можем задействовать встроенную библиотеку операционной системы CDO (Collaboration Data Objects) через механизм COM-соединения 1С.

Объект CDO.Message умеет самостоятельно устанавливать защищенное соединение по протоколам SSL/TLS. Посмотрим на пример реализации:


Попытка
    ПочтовоеСообщение = Новый COMОбъект("CDO.Message");
    ПочтоваяКонфигурация = Новый COMОбъект("CDO.Configuration");
    
    ПоляКонфигурации = ПочтоваяКонфигурация.Fields;
    Схема = "http://schemas.microsoft.com/cdo/configuration/";
    
    // Настройка параметров SMTP-сервера
    ПоляКонфигурации.Item(Схема + "sendusing").Value = 2; // cdoSendUsingPort
    ПоляКонфигурации.Item(Схема + "smtpserver").Value = "smtp.yandex.ru";
    ПоляКонфигурации.Item(Схема + "smtpserverport").Value = 465; // SSL-порт
    ПоляКонфигурации.Item(Схема + "smtpusessl").Value = Истина; // Включение SSL
    ПоляКонфигурации.Item(Схема + "smtpauthenticate").Value = 1; // cdoBasic (аутентификация по логину/паролю)
    ПоляКонфигурации.Item(Схема + "sendusername").Value = "your_login@yandex.ru";
    ПоляКонфигурации.Item(Схема + "sendpassword").Value = "your_app_password";
    ПоляКонфигурации.Item(Схема + "smtpconnectiontimeout").Value = 30;
    
    ПоляКонфигурации.Update();
    
    ПочтовоеСообщение.Configuration = ПочтоваяКонфигурация;
    ПочтовоеСообщение.From = "your_login@yandex.ru";
    ПочтовоеСообщение.To = "recipient@mail.ru";
    ПочтовоеСообщение.Subject = "Тема сообщения из 1С 8.1";
    ПочтовоеСообщение.TextBody = "Текст письма, отправленного через CDO.Message";
    
    // При необходимости можно добавить вложение:
    // ПочтовоеСообщение.AddAttachment("C:\Обмен\файл.zip");
    
    ПочтовоеСообщение.Send();
    Сообщить("Письмо успешно отправлено!");
Исключение
    Сообщить("Не удалось отправить письмо: " + ОписаниеОшибки());
КонецПопытки;

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

Способ 2. Использование локального SSL-прокси (утилиты Stunnel)

Если в конфигурации уже написано много кода с использованием стандартного объекта ИнтернетПочта, и переписывать его на COM-объекты нежелательно, рассмотрим вариант с прозрачным шифрованием трафика через утилиту Stunnel.

Разберем принцип работы:

  1. На компьютере или сервере с 1С устанавливается служба Stunnel.
  2. В конфигурационном файле прокси настраивается перенаправление входящих локальных незащищенных соединений на внешний SSL-сервер почты: локальный порт 127.0.0.1:25 перенаправляется на smtp.yandex.ru:465.
  3. В коде 1С 8.1 в объекте ИнтернетПочтовыйПрофиль в качестве адреса сервера указывается 127.0.0.1, а порт — 25.
  4. 1С отправляет письмо на локальный порт без шифрования, а утилита Stunnel оборачивает трафик в SSL/TLS и передает на удаленный сервер Яндекса или Mail.ru.

Способ 3. Переход на современную версию платформы 1С

Рассмотрим долгосрочное решение — обновление технологической платформы с 1С 8.1 на актуальную версию 1С 8.3:

  1. Информационная база переводится на запуск под платформой 1С 8.3.
  2. Для сохранения работоспособности старых конфигураций (например, Управление торговлей 10.3) отключается режим совместимости с 8.1 либо понижается до уровня «Не использовать» / «Версия 8.2.16» / «Версия 8.3».
  3. После этого становятся доступны все современные свойства и методы объектов ИнтернетПочтовыйПрофиль и ИнтернетПочта, включая поддержку SSL, TLS и протокола IMAP.

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

Если обновление платформы и использование COM-объектов по каким-либо причинам не подходят, разберем альтернативные варианты:

  1. Внешние компоненты: Подключение специализированных внешних библиотек (например, DialMail), которые добавляют в 1С 8.1 поддержку современных почтовых протоколов.
  2. Скрипты PowerShell / утилиты командной строки: 1С формирует параметры отправки и вызывает PowerShell-скрипт с помощью метода КомандаСистемы(), передавая отправку почты системным средствам Windows.
  3. Локальный почтовый релей (Relay): Настройка локальной службы SMTP (например, на базе IIS), которая принимает нешифрованные письма от 1С и сама пересылает их во внешние службы с шифрованием.
← На главную