Как исправить ошибку подключения к SMTP серверу Яндекса в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При настройке автоматической отправки писем из системы 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: Обязательное использование защищенного соединения SSL

Первым делом проанализируем настройки безопасности в коде 1С. Для порта 465 (SMTP) и порта 993 (IMAP) или 995 (POP3) необходимо обязательно включить соответствующие флаги в профиле подключения. Выясним, какие свойства за это отвечают.

Добавим в наш код следующие строки:


ПрофильПодключения.ИспользоватьSSLSMTP = Истина;
ПрофильПодключения.ИспользоватьSSLPOP3 = Истина; // Если используется получение почты по POP3
// Либо, если используется IMAP:
ПрофильПодключения.ИспользоватьSSLIMAP = Истина;

Без установки свойства ИспользоватьSSLSMTP в значение Истина, платформа 1С пытается подключиться к защищенному порту по обычному протоколу, что и вызывает ответ сервера 421. Обратите внимание, что на некоторых версиях платформы также может потребоваться указание протокола TLS. В современных релизах 1С (начиная с 8.3.12) это обрабатывается автоматически при включении SSL.

Решение 2: Настройка почтового ящика в веб-интерфейсе Яндекса

Даже идеально написанный код не поможет, если сам почтовый ящик закрыт для внешних программ. Рассмотрим, что нужно сделать в настройках почты Яндекса. Выясним причину, по которой сервер может блокировать авторизацию.

  1. Принятие пользовательского соглашения. Если почтовый ящик новый, вам необходимо хотя бы один раз зайти в него через браузер. Яндекс может потребовать подтвердить номер телефона, сменить временный пароль или просто нажать кнопку "Принимаю условия". Пока это не сделано, доступ по протоколу SMTP будет заблокирован.
  2. Активация доступа по протоколам. Зайдите в "Все настройки" -> "Почтовые программы". Обязательно установите галочки в пунктах:
    • "С сервера smtp.yandex.ru по протоколу SMTP";
    • "С сервера imap.yandex.ru по протоколу IMAP" (если вы планируете также получать письма).

Без этих галочек Яндекс будет воспринимать любые попытки подключения через сторонние приложения как несанкционированный доступ и обрывать соединение.

Решение 3: Использование паролей приложений

Современная политика безопасности Яндекса (Yandex ID) запрещает использование основного пароля от учетной записи в сторонних программах (включая 1С). Разберем, как создать специальный пароль.

Пароль приложения — это уникальный 16-значный код, который позволяет программе получить доступ к вашим данным без использования основного пароля. Для его создания:

  1. Перейдите в раздел управления аккаунтом (Яндекс ID) -> "Безопасность".
  2. Найдите пункт "Пароли приложений" (может потребоваться включить двухфакторную аутентификацию).
  3. Выберите тип приложения "Почта".
  4. Придумайте название (например, "1C_Robot") и нажмите "Создать".
  5. Скопируйте сгенерированный пароль и вставьте его в код 1С в свойство ПрофильПодключения.ПарольSMTP.

Важно: основной пароль от почты в коде 1С работать НЕ будет, если включены современные политики защиты.

Решение 4: Соответствие отправителя и авторизованного пользователя

Проанализируем еще одну тонкость. Яндекс очень строго следит за тем, чтобы поле "Отправитель" в самом письме совпадало с тем логином, под которым вы авторизовались на сервере. Посмотрим на этот участок кода:


Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Отправитель = "zetzon@yandex.ru"; // Этот адрес ДОЛЖЕН совпадать с логином
// ...
Письмо.Получатели.Добавить("customer@mail.ru");

Если в ПрофильПодключения.ПользовательSMTP указан один ящик, а в Письмо.Отправитель — другой (даже если оба принадлежат вам), Яндекс может расценить это как попытку спуфинга (подмены адреса) и разорвать сессию с ошибкой.

Решение 5: Настройка таймаута и инфраструктуры

Иногда разрыв канала происходит из-за того, что сервер или антивирус слишком долго проверяют сертификат. Рассмотрим, как увеличить время ожидания в 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С.

← На главную