Как программно настроить отправку электронных писем в 1С 8.3 через SMTP?

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

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

Основы работы с объектами ИнтернетПочта

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

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

Шаг 1. Настройка почтового профиля

Рассмотрим подробнее процесс создания и заполнения объекта ИнтернетПочтовыйПрофиль. Современные почтовые сервисы, такие как Yandex, Gmail или Mail.ru, требуют обязательного использования защищенного соединения (SSL/TLS). Если не указать соответствующие параметры, сервер отклонит попытку подключения.

Разберем на примере код для инициализации профиля:


Профиль = Новый ИнтернетПочтовыйПрофиль;

// Настройки SMTP сервера
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 465; // Стандартный порт для SSL
Профиль.ПользовательSMTP = "my-mail@yandex.ru";
Профиль.ПарольSMTP = "ваш_пароль_приложения";

// Настройки безопасности
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоСЗащищеннымСоединениемSMTP = Истина;
Профиль.СпособSMTPАутентификации = СпособSMTPАутентификации.ПовторениеСеанса;
Профиль.ВремяОжидания = 60; // Таймаут в секундах

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

Шаг 2. Формирование почтового сообщения

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

Посмотрим на пример создания сообщения с вложением:


Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.ИмяОтправителя = "Робот 1С";
Письмо.Отправитель.Адрес = "my-mail@yandex.ru";

// Добавление получателя
Получатель = Письмо.Получатели.Добавить();
Получатель.Адрес = "client@example.com";
Получатель.ОтображаемоеИмя = "Уважаемый Клиент";

Письмо.Тема = "Счет на оплату №123 от " + ТекущаяДата();

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

// Добавление вложения
ПутьКФайлу = "C:\Reports\Invoice123.pdf";
Письмо.Вложения.Добавить(ПутьКФайлу, "Счет_на_оплату.pdf");

При использовании метода Вложения.Добавить(), 1С автоматически считывает двоичные данные файла и упаковывает их в письмо в формате MIME.

Шаг 3. Отправка сообщения и обработка ошибок

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


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

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

Оптимизация: использование фоновых заданий

Проанализируем ситуацию с точки зрения пользователя. Если отправка письма выполняется непосредственно в коде формы, интерфейс 1С может "зависнуть" на несколько секунд, пока устанавливается соединение с SMTP-сервером. Чтобы этого избежать, мы рекомендуем выносить процедуру отправки в ФоновыеЗадания.

Алгоритм действий следующий:

  1. Создаем экспортную процедуру в общем модуле (с флагом "Сервер").
  2. Передаем в нее необходимые параметры (структуру с адресом, темой и данными файла).
  3. Вызываем ФоновыеЗадания.Выполнить().

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

Работа с кодировками и специфическими настройками

Иногда возникают проблемы с отображением русских символов в теме письма или теле сообщения. Для решения этой проблемы рассмотрим подробнее свойства кодировки в объекте ИнтернетПочтовоеСообщение. По умолчанию 1С использует UTF-8, что является стандартом, но в старых системах может потребоваться явное указание:

Письмо.Кодировка = "windows-1251";

Также стоит обратить внимание на свойство ОбработатьТексты(). Если вы формируете сложное HTML-письмо с картинками внутри, этот метод поможет корректно преобразовать пути к изображениям в CID-ссылки, чтобы картинки отображались прямо в теле письма у получателя.

Заключение

Мы рассмотрели полный цикл настройки почтовой системы внутри 1С. Ключевые правила успеха: правильная настройка ИнтернетПочтовыйПрофиль с учетом требований SSL/TLS, использование паролей приложений и обязательная обработка исключительных ситуаций. Применяя эти знания, вы сможете создать надежный механизм коммуникации вашей системы 1С с внешним миром.

← На главную