При автоматизации рассылок из 1С часто возникает задача привести внешний вид письма к корпоративному стандарту. Например, использовать шрифт Calibri размером 11pt. Поскольку объект ИнтернетПочтовоеСообщение сам по себе не содержит визуального редактора, оформление текста выполняется с помощью языка разметки HTML. В этой статье мы подробно разберем, как правильно сконструировать HTML-код письма, чтобы он корректно отображался у получателя.
Для того чтобы почтовый клиент получателя (например, Outlook или Gmail) понял, что письмо содержит оформление, нам необходимо использовать объект ИнтернетПочтовоеСообщение и явно указать тип текста. Рассмотрим базовый алгоритм:
Тексты сообщения.ТипТекста в значение ТипТекстаПочтовогоСообщения.HTML.Проанализируем типичную ошибку начинающих разработчиков, когда HTML-теги пишутся некорректно или используются устаревшие методы. Рассмотрим пример неправильного кода:
// ОШИБКА: Неправильный синтаксис кавычек и использование устаревшего тега font
ТекстПисьма = ТекстПисьма + "<font face"<"Calibri">"</font>";
Такой код вызовет ошибку компиляции или интерпретации в 1С из-за путаницы с кавычками. Кроме того, тег font считается устаревшим в современной веб-разработке. Вместо него следует использовать современные CSS-стили.
Большинство почтовых клиентов игнорируют внешние файлы стилей или блоки <style> в заголовке письма. Поэтому самым надежным способом является использование атрибута style непосредственно внутри HTML-тегов. Чтобы задать шрифт для всего письма, мы можем обернуть основной текст в тег <div> или <span>.
Разберем пример реализации задачи (Calibri, 11pt):
ТекстПисьма = "<div style='font-family: Calibri, sans-serif; font-size: 11pt;'>";
ТекстПисьма = ТекстПисьма + "Здравствуйте, " + Руководитель + "!" + "<br/><br/>";
ТекстПисьма = ТекстПисьма + "Информируем вас о предстоящих отпусках сотрудников.";
ТекстПисьма = ТекстПисьма + "</div>";
Письмо = Новый ИнтернетПочтовоеСообщение;
Текст = Письмо.Тексты.Добавить(ТекстПисьма);
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;
Обратите внимание на использование font-family: Calibri, sans-serif;. Указание sans-serif после основного шрифта — это правило хорошего тона. Если на устройстве получателя вдруг не окажется шрифта Calibri, система подберет наиболее похожий шрифт без засечек.
Когда мы выводим данные из информационных баз (например, списки сотрудников или остатки товаров), мы часто используем таблицы. Важно помнить, что стили, заданные в родительском <div>, часто не наследуются ячейками таблицы в некоторых почтовых клиентах (особенно в Microsoft Outlook).
Рассмотрим, как правильно оформить таблицу, чтобы шрифт оставался единым во всем документе. Выясним причину: для гарантии отображения стиля его нужно дублировать в описании таблицы и, желательно, в каждой ячейке <td>.
// Задаем стиль для таблицы
ТекстТаблицы = "<table border='1' style='border-collapse: collapse; font-family: Calibri; font-size: 11pt; width: 100%;'>";
ТекстТаблицы = ТекстТаблицы + "<tr style='background-color: #f2f2f2;'>
|<th>Сотрудник</th>
|<th>Дата начала</th>
|<th>Дата окончания</th></tr>";
Для Каждого Строка Из ДанныеОтпуска Цикл
ТекстТаблицы = ТекстТаблицы + "<tr>";
// Для максимальной надежности можно добавлять style в каждый td
ТекстТаблицы = ТекстТаблицы + "<td style='padding: 5px;'>" + Строка.Сотрудник + "</td>";
ТекстТаблицы = ТекстТаблицы + "<td style='padding: 5px;'>" + Формат(Строка.ДатаНачала, "ДФ=dd.MM.yyyy") + "</td>";
ТекстТаблицы = ТекстТаблицы + "<td style='padding: 5px;'>" + Формат(Строка.ДатаОкончания, "ДФ=dd.MM.yyyy") + "</td>";
ТекстТаблицы = ТекстТаблицы + "</tr>";
КонецЦикла;
ТекстТаблицы = ТекстТаблицы + "</table>";
Хотя в корпоративной среде Calibri является стандартом, при отправке внешним контрагентам лучше использовать "безопасные" шрифты, которые гарантированно есть на всех устройствах (Windows, macOS, iOS, Android). Проанализируем список наиболее популярных сочетаний:
Вместо того чтобы собирать сложную строку в коде 1С, что часто ведет к ошибкам и плохой читаемости конфигурации, мы рекомендуем использовать Макеты типа "HTML документ". Это позволяет:
[ИмяПолучателя]).Посмотрим на пример работы с макетом:
// Получаем текст из макета
Макет = ПолучитьМакет("МакетПисьмаHTML");
ТекстHTML = Макет.ПолучитьТекст();
// Выполняем подстановку данных
ТекстHTML = СтрЗаменить(ТекстHTML, "[Руководитель]", Данные.ФИО);
ТекстHTML = СтрЗаменить(ТекстHTML, "[ТаблицаДанных]", СформированнаяСтрокаТаблицы);
// Отправляем
Письмо = Новый ИнтернетПочтовоеСообщение;
ТекстСообщения = Письмо.Тексты.Добавить(ТекстHTML);
ТекстСообщения.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;
В 1С и офисных приложениях (Word, Outlook) принято измерять шрифт в пунктах (pt). Однако веб-интерфейсы часто используют пиксели (px). Чтобы письмо выглядело предсказуемо, полезно знать их соотношение:
10pt примерно равно 13.3px11pt (ваш случай) примерно равно 14.7px (в вебе часто округляют до 15px)12pt примерно равно 16pxИспользование pt в почте вполне допустимо, так как Microsoft Outlook ориентирован именно на эти единицы измерения. Если же ваша рассылка нацелена на мобильные устройства и веб-интерфейсы, попробуйте задать размер в px для более точного контроля.
Таким образом, комбинируя использование объекта ИнтернетПочтовоеСообщение, инлайновые стили CSS и аккуратную работу с HTML-разметкой, мы можем создавать профессионально оформленные письма, которые будут выглядеть одинаково хорошо у всех сотрудников компании.