Как настроить отправку почты из 1С через Office 365 и устранить ошибку STARTTLS?

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

При интеграции 1С с почтовыми сервисами Microsoft Office 365 системные администраторы и программисты часто сталкиваются с ошибкой: «Локальная ошибка сервера (SMTP error code 451 5.7.3 STARTTLS is required to send mail)». Эта проблема особенно актуальна для конфигураций на обычных формах (например, УТП, УПП) и старых версий платформы 1С:Предприятие. В этой статье мы подробно разберем, почему возникает эта ошибка и какие существуют проверенные способы её решения.

Выясняем причину проблемы: почему стандартные настройки не работают?

Проанализируем ситуацию с технической стороны. Почтовый сервер smtp.office365.com требует обязательного шифрования соединения. В отличие от классического SSL (порт 465), который устанавливает защищенное соединение сразу, Office 365 использует протокол STARTTLS на порту 587. Это означает, что соединение начинается в открытом виде, а затем клиент (1С) должен отправить команду STARTTLS, чтобы перевести сессию в зашифрованный режим.

Основная сложность заключается в том, что старые версии платформы 1С (ниже 8.3.12) не всегда корректно инициируют эту команду или используют устаревшие протоколы шифрования (TLS 1.0/1.1), которые Microsoft уже заблокировал. В современных реалиях требуются протоколы TLS 1.2 или TLS 1.3. Если платформа 1С не может договориться с сервером о типе шифрования, сервер обрывает соединение с ошибкой 451.

Способ 1. Использование стороннего TLS-прокси (stunnel)

Рассмотрим наиболее надежное решение для тех случаев, когда обновление платформы 1С невозможно или не дает результата. Мы можем использовать небольшую бесплатную утилиту stunnel, которая будет выступать посредником между 1С и Office 365. Она будет принимать незашифрованные данные от 1С на локальном компьютере и упаковывать их в современный TLS-туннель для отправки в Microsoft.

Разберем по шагам процесс настройки:

  1. Скачаем и установим stunnel на сервер, где работает 1С или служба 1С:Предприятия.
  2. Откроем файл конфигурации stunnel.conf (обычно находится в папке установки программы).
  3. Удалим стандартное содержимое и пропишем настройки для связи с Office 365:

[office365-smtp]
client = yes
protocol = smtp
accept = 127.0.0.1:25
connect = smtp.office365.com:587
verifyChain = yes
CAfile = ca-certs.pem
checkHost = smtp.office365.com
OCSPaia = yes

После этого перезапустим службу stunnel. Теперь в самой 1С нам нужно изменить параметры ИнтернетПочтовыйПрофиль. Мы будем указывать не реальный адрес Microsoft, а наш локальный «вход» в туннель:


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "127.0.0.1";
Профиль.ПортSMTP = 25; // Порт, который мы указали в параметре accept в stunnel
Профиль.ПользовательSMTP = "ваш_логин@домен.com";
Профиль.ПарольSMTP = "ваш_пароль";
Профиль.ИспользоватьSSLSMTP = Ложь; // Шифрование на себя берет stunnel

Этот метод позволяет обойти ограничения старых версий платформы и гарантирует использование актуальных версий TLS.

Способ 2. Отправка через COM-объект CDO

Посмотрим на альтернативный программный метод. Если объект ИнтернетПочтоваяПочта не справляется, мы можем использовать возможности операционной системы Windows напрямую через объект CDO (Collaboration Data Objects). Этот метод часто работает там, где стандартные средства 1С бессильны, так как использует системные библиотеки Microsoft.

Проанализируем пример кода для такой отправки:


CDOConfig = Новый COMОбъект("CDO.Configuration");
CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;
CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtp.office365.com";
CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = 587;
CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1;
CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = Истина;
CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "login@yourdomain.com";
CDOConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = "your_password";
CDOConfig.Fields.Update();

Сообщение = Новый COMОбъект("CDO.Message");
Сообщение.Configuration = CDOConfig;
Сообщение.From = "login@yourdomain.com";
Сообщение.To = "recipient@mail.ru";
Сообщение.Subject = "Тема письма из 1С";
Сообщение.TextBody = "Текст сообщения";
Сообщение.Send();

Важно помнить, что при использовании порта 587 и smtpusessl = Истина, библиотека CDO сама корректно обрабатывает команду STARTTLS.

Способ 3. Проверка административных настроек Office 365

Иногда причина кроется не в коде 1С, а в политиках безопасности самого тенанта Microsoft 365. Если настройки в 1С верны, но ошибка сохраняется, необходимо выполнить следующие действия в панели администрирования:

Подведем итоги

Для успешной отправки почты через Office 365 из 1С необходимо учитывать версию используемой платформы. Если у вас современная платформа (8.3.18+), скорее всего, достаточно будет правильно настроить профиль с использованием ИспользоватьSSLSMTP = Истина и порта 587. Однако для более старых систем наиболее стабильным решением остается связка с stunnel или использование CDO. Не забывайте также проверять настройки разрешений для конкретного почтового ящика в панели управления Microsoft 365, так как без разрешения Authenticated SMTP ни один из программных методов не сработает.

← На главную