При интеграции систем 1С с современными облачными почтовыми сервисами, такими как Microsoft Office 365, разработчики часто сталкиваются с ситуацией, когда стандартный код отправки почты, годами работавший стабильно, начинает выдавать ошибку: Ошибка при вызове метода контекста (Послать): Сервис отключен с разрывом канала (SMTP error code 421 421 SMTP connection broken). Особенно загадочно эта проблема выглядит, когда в одной базе (например, «Бухгалтерия») почта уходит успешно, а в другой (например, «Управление торговлей»), расположенной на том же сервере, возникает критический сбой.
В этой статье мы подробно разберем причины возникновения этой ошибки, проанализируем влияние платформенных настроек на сетевое взаимодействие и рассмотрим проверенные способы решения проблемы.
Рассмотрим типовой сценарий: используется платформа 1С версии 8.3.10. Для отправки писем применяется объект ИнтернетПочта. Настройка профиля выполняется стандартным образом через ИнтернетПочтовыйПрофиль. Проанализируем пример кода, который часто используется для тестирования соединения:
Процедура ОтправитьТестПисьмо()
ПараметрыПочты = новый ИнтернетПочтовыйПрофиль;
ПараметрыПочты.АдресСервераSMTP = "smtp.office365.com";
ПараметрыПочты.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
ПараметрыПочты.ПользовательSMTP = "your_login@domain.com";
ПараметрыПочты.ПарольSMTP = "your_password";
ПараметрыПочты.ПортSMTP = 587;
ПараметрыПочты.ИспользоватьSSLSMTP = Ложь; // Важный момент для порта 587
ПараметрыПочты.Таймаут = 600;
Письмо = новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Тест электронной почты";
Письмо.Отправитель = "your_login@domain.com";
Письмо.Получатели.Добавить("recipient@domain.com");
Письмо.Тексты.Добавить("Проверка связи через Office 365");
Подключение = новый ИнтернетПочта;
Попытка
Подключение.Подключиться(ПараметрыПочты);
Подключение.Послать(Письмо);
Сообщить("Письмо отправлено успешно.");
Исключение
Сообщить("Ошибка: " + ОписаниеОшибки());
КонецПопытки;
Подключение.Отключиться();
КонецПроцедуры
В данной ситуации характерно то, что метод Подключиться() отрабатывает без ошибок, но выполнение метода Послать() приводит к немедленному разрыву соединения сервером. Это происходит из-за того, что Office 365 требует обязательного использования протокола STARTTLS на порту 587. Если клиент (1С) не инициирует безопасное соединение должным образом сразу после команды HELO/EHLO, сервер обрывает сессию.
Выясним, почему одна база отправляет письма, а другая — нет, при идентичном коде. Ключ к разгадке часто кроется в свойстве конфигурации Режим совместимости. Если в одной базе установлен режим 8.3.1 или выше, а в другой — 8.2.13, платформа использует разные внутренние библиотеки для работы с защищенными соединениями.
В старых режимах совместимости (например, 8.2.13) 1С использует устаревшие алгоритмы и наборы шифров (Cipher Suites), которые Office 365 считает небезопасными. Microsoft постепенно отключает поддержку TLS 1.0 и TLS 1.1, требуя как минимум TLS 1.2. При установке современного режима совместимости платформа начинает использовать актуальные системные библиотеки Windows для работы с сетью, что позволяет успешно пройти этап рукопожатия (handshake) TLS.
Важное предупреждение: Изменение режима совместимости в рабочей базе — это серьезная операция. Как показывает практика, это может привести к неработоспособности самописных отчетов, использующих виртуальные таблицы (ОстаткиИОбороты), из-за изменений в механизмах генерации SQL-запросов. Поэтому, прежде чем менять этот параметр, необходимо провести полное тестирование системы.
Проанализируем требования Office 365 к шифрованию. Для порта 587 характерно использование «явного SSL» (Explicit SSL), также известного как STARTTLS. В 1С это настраивается сочетанием порта и флага использования SSL.
Разберем, как правильно настроить параметры в современных версиях платформы:
ПараметрыПочты.ПортSMTP = 587;.ПараметрыПочты.ИспользоватьSSLSMTP = Истина;.ЗащищенноеСоединениеOpenSSL.Если вы используете версию платформы ниже 8.3.12, объект ИнтернетПочтовыйПрофиль может некорректно обрабатывать STARTTLS на некоторых конфигурациях. В этом случае сервер возвращает ошибку 451 5.7.3 STARTTLS is required to send mail или просто разрывает соединение.
Даже при идеально написанном коде в 1С, отправка может блокироваться на стороне облачного сервиса. Рассмотрим действия, которые должен выполнить системный администратор в панели управления Microsoft 365 Admin Center:
Если изменение режима совместимости в 1С невозможно из-за риска поломки отчетов, а почту отправлять необходимо, проанализируем вариант с использованием промежуточного звена. Можно настроить локальный почтовый прокси-сервер (например, stunnel или встроенный компонент SMTP Server в Windows Server).
Схема работы будет выглядеть так:
localhost (127.0.0.1) по порту 25 без шифрования и авторизации.Этот метод позволяет обойти ограничения старых версий платформы 1С, не внося рискованных изменений в саму конфигурацию.
Если одна база работает, а другая — нет, проверьте следующие моменты:
Подключиться() письмо уже полностью сформировано. Если формирование вложений занимает много времени после вызова Подключиться(), сервер может разорвать соединение по таймауту.Подводя итог, можно сказать, что наиболее эффективным решением для современных конфигураций является обновление режима совместимости до 8.3.1 и выше, а для критически важных старых систем — использование SMTP-реле или внешних библиотек для отправки почты.