Как сформировать и отправить HTML-письмо по шаблону в 1С

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

При автоматической отправке писем из 1С стандартного текстового формата часто бывает недостаточно. Для оформления коммерческих предложений, уведомлений клиентам или рассылок отчетов требуется красивый внешний вид: таблицы с рамками, фирменные шрифты, цвета и структурированные блоки. Разберем по шагам, как загрузить готовый HTML-макет в 1С, подставить в него динамические данные и корректно отправить получателю.

Принцип работы с шаблонами писем

Формирование письма строится на простой и надежной схеме: мы берем готовую HTML-разметку, размечаем в ней места для вставки данных специальными маркерами (якорями), а затем в коде 1С заменяем эти маркеры на фактические значения с помощью функции СтрЗаменить().

Рассмотрим типовой процесс решения задачи:

  1. Подготовка HTML-шаблона с уникальными метками подстановки (например, %ЗАГОЛОВОК%, %НОМЕР_ЗАКАЗА%, %СУММА%).
  2. Размещение шаблона в конфигурации (в макете) или во внешнем файле на диске.
  3. Считывание текста шаблона в строковую переменную в коде 1С.
  4. Экранирование спецсимволов и замена меток на реальные реквизиты документов или справочников.
  5. Заполнение объекта ИнтернетПочтовоеСообщение и вызов метода ОбработатьТексты().
  6. Отправка письма через ИнтернетПочта.

Подготовка HTML-шаблона и хранение в 1С

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

Посмотрим на пример структуры HTML-макета:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <meta charset="UTF-8">
    <title>%ТЕМА%</title>
</head>
<body style="background-color: #f4f4f4; margin: 0; padding: 20px; font-family: Arial, sans-serif;">
    <table border="0" cellpadding="0" cellspacing="0" width="600" align="center" style="background-color: #ffffff; padding: 20px; border-radius: 5px;">
        <tr>
            <td>
                <h2 style="color: #333333;">%ЗАГОЛОВОК%</h2>
                <p style="color: #555555; line-height: 1.5;">Здравствуйте, %ИМЯ_КЛИЕНТА%!</p>
                <p style="color: #555555; line-height: 1.5;">%ТЕКСТ_СООБЩЕНИЯ%</p>
                <hr style="border: none; border-top: 1px solid #e0e0e0; margin: 20px 0;">
                <p style="color: #888888; font-size: 12px;">%ПОДПИСЬ%</p>
            </td>
        </tr>
    </table>
</body>
</html>

Для удобного использования в базе 1С сохраним этот код в макет обработки или документа с типом Текстовый документ или HTML-документ.

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

Проанализируем программный код, выполняющий чтение макета, замену меток и формирование интернет-сообщения.


// 1. Получаем текст шаблона из макета
МакетШаблона = ЭтотОбъект.ПолучитьМакет("ШаблонПисьма");
ТекстПисьма = МакетШаблона.ПолучитьТекст();

// 2. Подготавливаем данные
ЗаголовокПисьма = "Уведомление о готовности заказа";
ИмяПолучателя   = "Иван Иванович";
ТекстСообщения  = "Ваш заказ №123 от 10.05.2024 готов к выдаче.";
ПодписьОтправителя = "С уважением, отдел продаж<br>тел. +7 (000) 000-00-00";

// 3. Выполняем подстановку значений вместо якорей
ТекстПисьма = СтрЗаменить(ТекстПисьма, "%ТЕМА%", ЗаголовокПисьма);
ТекстПисьма = СтрЗаменить(ТекстПисьма, "%ЗАГОЛОВОК%", ЗаголовокПисьма);
ТекстПисьма = СтрЗаменить(ТекстПисьма, "%ИМЯ_КЛИЕНТА%", ИмяПолучателя);
ТекстПисьма = СтрЗаменить(ТекстПисьма, "%ТЕКСТ_СООБЩЕНИЯ%", ТекстСообщения);
ТекстПисьма = СтрЗаменить(ТекстПисьма, "%ПОДПИСЬ%", ПодписьОтправителя);

// 4. Формируем интернет-почтовое сообщение
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = ЗаголовокПисьма;
Письмо.Кодировка = "UTF-8";
Письмо.Получатели.Добавить("client@example.com");

// Добавляем HTML-текст в коллекцию текстов письма
Письмо.Тексты.Добавить(ТекстПисьма, ТипТекстаПочтовогоСообщения.HTML);

// При необходимости можно добавить дублирующий простой текст для старых клиентов
Письмо.Тексты.Добавить(ТекстСообщения, ТипТекстаПочтовогоСообщения.ПростойТекст);

// Обязательно вызываем обработку текстов
Письмо.ОбработатьТексты();

// 5. Отправка письма
Почта = Новый ИнтернетПочта;
Почта.Подключиться(ПрофильПочты);
Почта.Послать(Письмо);
Почта.Отключиться();

Важные технические нюансы

При формировании почтовых HTML-сообщений важно учитывать ряд особенностей платформы 1С и почтовых клиентов:

  1. Вызов метода ОбработатьТексты(): метод необходим для корректной подготовки структуры письма (создания multipart-контейнеров). Если в разметке присутствуют локальные пути к изображениям, платформа автоматически привяжет их через Content-ID (CID) и добавит во вложения.
  2. Экранирование символов: если подставляемые из базы данные могут содержать символы <, >, & или кавычки, их необходимо предварительно преобразовать в соответствующие HTML-сущности (&lt;, &gt;, &amp;), чтобы не нарушить структуру тегов.
  3. Переносы строк: символы перевода строки Символы.ПС браузерами и почтовыми клиентами игнорируются. Перед подстановкой многострочного текста замените Символы.ПС на тег <br>.
  4. Табличная верстка и инлайн-стили: почтовые программы (в частности, Microsoft Outlook) плохо поддерживают современные CSS-фреймворки, Flexbox и внешние стили. Всю верстку шаблона следует строить на таблицах <table>, а стили оформления задавать напрямую через атрибут style="" у каждого тега.
  5. Согласование кодировок: следите, чтобы метатег <meta charset="..."> внутри HTML совпадал со свойством Кодировка объекта ИнтернетПочтовоеСообщение (наиболее универсальным выбором является "UTF-8").

Для интерактивной проверки готового письма перед фактической отправкой можно разместить на форме элемент управления Поле HTML документа и передать в него полученную строку через метод УстановитьТекст().

← На главную