Как программно отправить электронное письмо из 1С 8.3 через SMTP с поддержкой SSL/TLS?

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

В современной разработке на платформе 1С:Предприятие 8.3 задача программной отправки уведомлений, отчетов или счетов на электронную почту является одной из самых востребованных. Однако с ужесточением правил безопасности почтовых сервисов, таких как Yandex, Gmail или Mail.ru, обычного указания логина и пароля стало недостаточно. В данной статье мы подробно разберем, как правильно настроить объекты 1С для работы с защищенными протоколами и как обойти распространенные ошибки аутентификации.

Разберем основные объекты для работы с почтой

Для реализации почтового клиента внутри 1С нам потребуются три основных программных объекта. Проанализируем назначение каждого из них:

  1. ИнтернетПочтовыйПрофиль — этот объект хранит настройки подключения к серверу: адреса, порты, параметры аутентификации и настройки шифрования.
  2. ИнтернетПочтовоеСообщение — объект, представляющий собой само письмо. Здесь мы задаем тему, текст, получателей и прикрепляем файлы.
  3. ИнтернетПочта — основной механизм, который осуществляет соединение с сервером и выполняет команду отправки подготовленного сообщения.

Шаг 1: Настройка профиля подключения (ИнтернетПочтовыйПрофиль)

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

Посмотрим на пример кода, который инициализирует профиль для работы с Yandex через защищенный порт 465:


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "my-mail@yandex.ru";

// ВАЖНО: Пароль должен быть "Паролем приложения", а не основным паролем от аккаунта
Профиль.ПарольSMTP = "abcd-efgh-ijkl-mnop"; 

Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Ложь;
Профиль.АутентификацияSMTP = СпособИнтернетАутентификации.Login;

Проанализируем ключевые параметры. Свойство ИспользоватьSSLSMTP включает шифрование трафика. Без него данные будут передаваться в открытом виде, что запрещено современными стандартами безопасности. Свойство ПортSMTP обычно принимает значение 465 (для SSL) или 587 (для STARTTLS).

Шаг 2: Проблема паролей приложений и ошибка 535

Выясним причину, по которой часто возникает ошибка "535 5.7.8 Error: authentication failed". В последнее время почтовые гиганты перешли на использование механизма паролей приложений. Это означает, что даже если вы вводите верный логин и основной пароль от почты в 1С, сервер их отклонит.

Чтобы решить эту проблему, выполним следующие действия:

  1. Зайдем в настройки безопасности вашего почтового ящика (в браузере).
  2. Найдем раздел "Пароли приложений" или "Доступ из сторонних программ".
  3. Создадим новый пароль для типа "Почта" и назовем его, например, "1C_Data_Exchange".
  4. Полученный 16-значный код скопируем в код 1С в свойство ПарольSMTP.

Важный момент: если ваша конфигурация работает на сервере, убедитесь, что серверу 1С разрешен доступ в интернет по указанным портам через брандмауэр.

Шаг 3: Формирование письма (ИнтернетПочтовоеСообщение)

Теперь подготовим само письмо. Объект ИнтернетПочтовоеСообщение позволяет гибко настраивать содержимое. Рассмотрим, как создать сообщение с телом в формате HTML и вложением.


Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Отчет по продажам за " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
Письмо.Отправитель.Адрес = "my-mail@yandex.ru";
Письмо.Отправитель.ОтображаемоеИмя = "Робот 1С";

// Добавление получателя
НовыйПолучатель = Письмо.Получатели.Добавить();
НовыйПолучатель.Адрес = "manager@company.com";

// Формирование текста в формате HTML
ТекстHTML = "<html><body><h1>Ежедневный отчет</h1><p>Во вложении файл с данными.</p></body></html>";
Письмо.Тексты.Добавить(ТекстHTML, ТипТекстаПочтовогоСообщения.HTML);

// Добавление вложения, если файл существует на диске
Если ФайлСуществует Тогда
    Письмо.Вложения.Добавить(ПутьКФайлу, "Report.pdf");
КонецЕсли;

Обратите внимание на использование ТипТекстаПочтовогоСообщения.HTML. Это позволяет использовать теги для форматирования текста письма, вставки таблиц и выделения жирным шрифтом, что делает уведомления более читабельными для пользователей.

Шаг 4: Отправка через объект ИнтернетПочта

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


Почта = Новый ИнтернетПочта;

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

Проанализируем ситуацию, когда письмо не уходит. Если 1С выдает ошибку "Время ожидания истекло", проверьте свойство Таймаут у профиля. По умолчанию оно может быть слишком коротким для больших вложений. Установите его значение в 60 или 120 секунд: Профиль.Таймаут = 60;.

Дополнительные рекомендации по работе с TLS

Если вы используете платформу 1С v8.3 (Управляемые формы), помните, что метод Подключиться объекта ИнтернетПочта может принимать второй параметр — протокол шифрования. В некоторых случаях, для специфических серверов, требуется явно указать использование STARTTLS.

Рассмотрим вариант настройки для порта 587:


Профиль.ПортSMTP = 587;
Профиль.ИспользоватьSSLSMTP = Ложь; // SSL не включаем сразу
Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Истина;
// STARTTLS будет инициирован платформой автоматически при необходимости

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

Подводя итог, можно сказать, что правильная комбинация настроек ИнтернетПочтовыйПрофиль и использование паролей приложений решают 99% проблем с отправкой почты из 1С. Мы рекомендуем всегда вести лог отправки писем в отдельном регистре сведений, чтобы администратор системы мог оперативно отследить недоставленные сообщения.

← На главную