Как отправить электронное письмо из 1С через внешний почтовый сервер?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

Отправка электронных писем напрямую из 1С — типовая задача при автоматизации документооборота, оповещения контрагентов или отправки счетов. Однако разработчики часто сталкиваются с ситуацией, когда код написан, но почтовый сервер возвращает ошибку авторизации, сбрасывает соединение или выдает системную ошибку 421. Разберем по шагам, как правильно настроить подключение к почтовому серверу, сформировать письмо и избежать распространенных подводных камней.

Типичные ошибки при реализации отправки почты в 1С

Проанализируем ситуацию, с которой столкнулись участники обсуждения, и выделим критические ошибки, приводящие к отказу сервера:

  1. Путаница между объектами Почта и ИнтернетПочта. Объект Почта предназначен исключительно для взаимодействия с почтовым клиентом операционной системы по интерфейсу MAPI. Он не предназначен для прямой работы с профилем ИнтернетПочтовыйПрофиль. Для прямой отправки по протоколу SMTP необходимо всегда использовать объект ИнтернетПочта.
  2. Неправильный номер порта и отсутствие SSL-шифрования. Стандартный 25-й порт часто блокируется интернет-провайдерами для защиты от спама и не поддерживает защищенное соединение SMTPS. Для отправки через защищенный канал требуется порт 465 с установкой флага ИспользоватьSSLSMTP = Истина.
  3. Использование основного пароля учетной записи. Современные почтовые сервисы (Яндекс, Mail.ru, Gmail) требуют генерации специального пароля для приложений в настройках безопасности учетной записи. Обычный пароль от веб-интерфейса сервер отклонит.
  4. Некорректный адрес отправителя. Почтовые сервисы жестко проверяют соответствие адреса отправителя учетной записи авторизации. Если в свойстве Отправитель указать просто имя пользователя без почтового домена или сторонний e-mail, сервер вернет ошибку проверки подлинности адреса.

Пошаговый алгоритм отправки письма по протоколу SMTP

Рассмотрим правильный порядок действий при программной отправке электронного сообщения средствами платформы 1С:Предприятие:

  1. Создаем и настраиваем объект ИнтернетПочтовыйПрофиль, задавая параметры SMTP-сервера, логин, пароль приложения, порт 465 и обязательный признак SSL.
  2. Формируем объект ИнтернетПочтовоеСообщение: указываем получателей, тему, отправителя и добавляем текст сообщения через коллекцию Тексты.
  3. Выполняем подключение к серверу через объект ИнтернетПочта внутри блока обработки исключений Попытка ... Исключение.
  4. Отправляем сформированное сообщение методом Послать().
  5. Обязательно закрываем сессию методом Отключиться(), чтобы освободить сетевой канал.

Пример программного кода отправки письма

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


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 465;
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ПользовательSMTP = "vasha_pochta@yandex.ru";
// Важно: здесь необходимо указывать сгенерированный пароль приложения!
Профиль.ПарольSMTP = "parol_prilozheniya";
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
Профиль.Таймаут = 60;

// Создаем сообщение
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Тема письма из 1С";
Письмо.Отправитель = "vasha_pochta@yandex.ru";
Письмо.ИмяОтправителя = "ООО Наша Компания";
Письмо.Получатели.Добавить("client@example.com");

// Формируем тело сообщения
ТекстПисьма = Письмо.Тексты.Добавить("Здравствуйте! Направляем вам информацию из базы 1С.");
ТекстПисьма.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;

// Отправка через ИнтернетПочта
Почта = Новый ИнтернетПочта;
Попытка
    Почта.Подключиться(Профиль);
    Почта.Послать(Письмо);
    Почта.Отключиться();
    Сообщить("Письмо успешно отправлено!");
Исключение
    Попытка
        Почта.Отключиться();
    Исключение
    КонецПопытки;
    Сообщить("Ошибка при отправке почты: " + ОписаниеОшибки());
КонецПопытки;

Разбор ошибки 421 и тонкости сетевой безопасности

Выясним причину возникновения ошибки с кодом 421 (Service not available, closing transmission channel). Данная ошибка означает, что почтовый сервер принудительно разорвал канал передачи данных. Чаще всего это происходит в следующих случаях:

  1. Несоответствие протоколов шифрования TLS. Если база 1С выполняется на старых версиях операционной системы (например, устаревшие выпуски Windows Server), платформа может пытаться инициировать соединение через устаревшие версии TLS 1.0 или 1.1. Современные почтовые службы требуют протокол TLS 1.2 или выше.
  2. Срабатывание защитных лимитов (Rate Limiting). Если из 1С выполняется частая циклическая отправка сообщений или было зафиксировано несколько неудачных попыток ввода пароля подряд, почтовый сервер временно блокирует IP-адрес отправителя. В таком случае помогает установка паузы между отправками или увеличение свойства Таймаут в профиле.
  3. Зависшие сетевые сессии. Если в коде не вызывается метод Отключиться() при возникновении сбоев, сервер держит открытые сессии до истечения времени ожидания. Именно поэтому вызов отключения рекомендуется дублировать в блоке Исключение.

Альтернативные способы организации почтовой рассылки в 1С

Рассмотрим альтернативные подходы, если стандартная отправка через ИнтернетПочта сталкивается с ограничениями безопасности или версий платформы:

  1. Подсистема «Работа с почтовыми сообщениями» из БСП. В конфигурациях, где внедрена Библиотека стандартных подсистем, рекомендуется использовать типовой программный интерфейс БСП. Он берет на себя хранение учетных записей, создание очередей писем, автоматическую фоновую отправку регламентным заданием и логирование сетевых ошибок.
  2. Локальный почтовый релей (SMTP-шлюз). Если старая платформа не поддерживает современные протоколы шифрования внешнего сервера, на сервере разворачивается локальная служба ретрансляции или утилита туннелирования. Платформа 1С отправляет письмо на локальный адрес без шифрования по порту 25, а шлюз самостоятельно передает его во внешнюю сеть по безопасному каналу TLS 1.2/1.3.
  3. Отправка через HTTP-сервисы и REST API. Для сервисов, поддерживающих работу по API, отправку можно организовать через объект HTTPСоединение. Этот вариант решает проблему блокировок стандартных почтовых портов интернет-провайдерами, так как обмен идет по обычному HTTPS-порту 443.
← На главную