При автоматической отправке писем из 1С стандартного текстового формата часто бывает недостаточно. Для оформления коммерческих предложений, уведомлений клиентам или рассылок отчетов требуется красивый внешний вид: таблицы с рамками, фирменные шрифты, цвета и структурированные блоки. Разберем по шагам, как загрузить готовый HTML-макет в 1С, подставить в него динамические данные и корректно отправить получателю.
Формирование письма строится на простой и надежной схеме: мы берем готовую 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С и почтовых клиентов:
ОбработатьТексты(): метод необходим для корректной подготовки структуры письма (создания multipart-контейнеров). Если в разметке присутствуют локальные пути к изображениям, платформа автоматически привяжет их через Content-ID (CID) и добавит во вложения.<, >, & или кавычки, их необходимо предварительно преобразовать в соответствующие HTML-сущности (<, >, &), чтобы не нарушить структуру тегов.Символы.ПС браузерами и почтовыми клиентами игнорируются. Перед подстановкой многострочного текста замените Символы.ПС на тег <br>.<table>, а стили оформления задавать напрямую через атрибут style="" у каждого тега.<meta charset="..."> внутри HTML совпадал со свойством Кодировка объекта ИнтернетПочтовоеСообщение (наиболее универсальным выбором является "UTF-8").Для интерактивной проверки готового письма перед фактической отправкой можно разместить на форме элемент управления Поле HTML документа и передать в него полученную строку через метод УстановитьТекст().