При настройке автоматической отправки писем из системы 1С:Предприятие разработчики часто сталкиваются с ошибкой: "Сервис отключен с разрывом канала (SMTP error code 421 SMTP connection broken)". Эта ошибка сигнализирует о том, что почтовый сервер разорвал соединение еще на этапе инициализации или авторизации. Давайте подробно разберем причины возникновения этой ситуации и пошагово настроим систему для стабильной работы с почтой через Яндекс.
Рассмотрим типовой фрагмент кода, который часто приводит к возникновению ошибки 421. Проблема заключается в том, что современные почтовые сервисы, такие как Яндекс, Gmail или Mail.ru, предъявляют жесткие требования к безопасности соединения, которые не всегда учитываются в стандартных примерах кода.
ПрофильПодключения = Новый ИнтернетПочтовыйПрофиль;
ПрофильПодключения.АдресСервераSMTP ="smtp.yandex.ru";
ПрофильПодключения.ПортSMTP = 465;
ПрофильПодключения.ПользовательSMTP = "zetzon@yandex.ru";
ПрофильПодключения.ПарольSMTP ="1234567890";
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(ПрофильПодключения);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
В данном примере мы видим классическую настройку. Однако, при использовании порта 465, сервер ожидает немедленного установления защищенного соединения (SSL). Если в объекте ИнтернетПочтовыйПрофиль не указано использование SSL явным образом, сервер фиксирует некорректную попытку подключения и обрывает канал.
Первым делом проанализируем настройки безопасности в коде 1С. Для порта 465 (SMTP) и порта 993 (IMAP) или 995 (POP3) необходимо обязательно включить соответствующие флаги в профиле подключения. Выясним, какие свойства за это отвечают.
Добавим в наш код следующие строки:
ПрофильПодключения.ИспользоватьSSLSMTP = Истина;
ПрофильПодключения.ИспользоватьSSLPOP3 = Истина; // Если используется получение почты по POP3
// Либо, если используется IMAP:
ПрофильПодключения.ИспользоватьSSLIMAP = Истина;
Без установки свойства ИспользоватьSSLSMTP в значение Истина, платформа 1С пытается подключиться к защищенному порту по обычному протоколу, что и вызывает ответ сервера 421. Обратите внимание, что на некоторых версиях платформы также может потребоваться указание протокола TLS. В современных релизах 1С (начиная с 8.3.12) это обрабатывается автоматически при включении SSL.
Даже идеально написанный код не поможет, если сам почтовый ящик закрыт для внешних программ. Рассмотрим, что нужно сделать в настройках почты Яндекса. Выясним причину, по которой сервер может блокировать авторизацию.
Без этих галочек Яндекс будет воспринимать любые попытки подключения через сторонние приложения как несанкционированный доступ и обрывать соединение.
Современная политика безопасности Яндекса (Yandex ID) запрещает использование основного пароля от учетной записи в сторонних программах (включая 1С). Разберем, как создать специальный пароль.
Пароль приложения — это уникальный 16-значный код, который позволяет программе получить доступ к вашим данным без использования основного пароля. Для его создания:
ПрофильПодключения.ПарольSMTP.Важно: основной пароль от почты в коде 1С работать НЕ будет, если включены современные политики защиты.
Проанализируем еще одну тонкость. Яндекс очень строго следит за тем, чтобы поле "Отправитель" в самом письме совпадало с тем логином, под которым вы авторизовались на сервере. Посмотрим на этот участок кода:
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Отправитель = "zetzon@yandex.ru"; // Этот адрес ДОЛЖЕН совпадать с логином
// ...
Письмо.Получатели.Добавить("customer@mail.ru");
Если в ПрофильПодключения.ПользовательSMTP указан один ящик, а в Письмо.Отправитель — другой (даже если оба принадлежат вам), Яндекс может расценить это как попытку спуфинга (подмены адреса) и разорвать сессию с ошибкой.
Иногда разрыв канала происходит из-за того, что сервер или антивирус слишком долго проверяют сертификат. Рассмотрим, как увеличить время ожидания в 1С. По умолчанию таймаут может быть слишком коротким (обычно 30 секунд).
ПрофильПодключения.Таймаут = 60; // Установим 60 или 120 секунд
Также проанализируем внешние факторы. Антивирусное ПО (например, Kaspersky или Dr.Web) часто имеет встроенные модули проверки почты, которые перехватывают трафик на портах 465 и 587. Это приводит к тому, что 1С видит сертификат антивируса вместо сертификата Яндекса. Попробуйте временно отключить проверку защищенных соединений или добавить процесс 1cv8.exe (или rphost.exe для серверной версии) в исключения.
Соберем все наши исправления в единый рабочий блок кода, который учитывает все современные требования безопасности.
&НаСервере
Процедура ОтправитьПисьмоЯндекс()
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 465;
// Используем ПАРОЛЬ ПРИЛОЖЕНИЯ, а не основной пароль
Профиль.ПользовательSMTP = "zetzon@yandex.ru";
Профиль.ПарольSMTP = "abcd-efgh-ijkl-mnop"; // Пример 16-значного кода
// ВКЛЮЧАЕМ SSL - это критично для порта 465
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.Таймаут = 60;
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль);
Исключение
Сообщить("Ошибка при подключении: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Тестовое сообщение 1С";
Письмо.Отправитель = "zetzon@yandex.ru"; // Адрес совпадает с логином
Письмо.ИмяОтправителя = "Робот 1С";
Письмо.Тексты.Добавить("Текст письма успешно доставлен!");
Письмо.Получатели.Добавить("recipient@example.com");
Попытка
Почта.Послать(Письмо);
Сообщить("Письмо успешно отправлено!");
Исключение
Сообщить("Ошибка при отправке: " + ОписаниеОшибки());
КонецПопытки;
Почта.Отключиться();
КонецПроцедуры
Подводя итог, разберем краткий чек-лист. Если вы получаете ошибку 421 при работе с Яндексом, проверьте следующее: установлен ли флаг ИспользоватьSSLSMTP, создан ли пароль приложения в личном кабинете Яндекс ID, разрешена ли работа по протоколам SMTP в настройках самого ящика и не блокирует ли соединение антивирус или брандмауэр на сервере. Соблюдение этих правил гарантирует стабильную отправку писем из 1С.