Как отформатировать текст электронного письма в 1С 8, чтобы он был читабельным?

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

При автоматической отправке уведомлений из 1С программисты часто сталкиваются с проблемой: сформированный текст письма в почтовом клиенте (особенно в Microsoft Outlook) выглядит как «каша». Переносы строк, добавленные через Символы.ПС, игнорируются, а текст слипается в один неразрывный блок. В этой статье мы разберем, почему это происходит и как правильно оформить письмо, используя возможности платформы 1С и HTML-разметку.

Почему обычный текст «склеивается»?

Прежде чем переходить к коду, выясним причину проблемы. Почтовые клиенты, такие как Outlook, используют внутренние алгоритмы для очистки текста от «лишних», по их мнению, разрывов строк. Если строка кажется программе слишком короткой или она не заканчивается точкой, клиент может решить, что это случайный перенос, и объединить строки для «лучшей читаемости». Чтобы этого избежать, мы рассмотрим два основных пути: правильное использование Plain Text и переход на HTML.

Способ 1: Использование HTML-разметки (рекомендуемый)

Самый надежный способ управления внешним видом письма — это использование формата HTML. В этом случае мы полностью контролируем каждый перенос строки и шрифт. Для переноса строки в HTML используется тег <br>, а не Символы.ПС.

Проанализируем пример динамической сборки HTML-текста. Мы можем создать макет письма с «метками-заполнителями», которые будем заменять на реальные данные из информационной базы с помощью функции СтрЗаменить.

Рассмотрим структуру такого макета (его можно хранить как текстовый макет в конфигурации):


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
    body { font-family: Arial, sans-serif; }
    .status-error { color: red; font-weight: bold; }
    .project-header { background-color: #f2f2f2; padding: 5px; }
</style>
</head>
<body>
    <!--ТЕЛО_ПИСЬМА-->
</body>
</html>

Теперь разберем программную часть формирования контента. Вместо простого сложения строк, мы будем формировать фрагменты HTML-кода:


ТекстHTML = ПолучитьМакет("МакетПисьма").ПолучитьТекст();
Содержимое = "";

Для Каждого ТекСтрокаПроект Из СписокПроектов Цикл
    Содержимое = Содержимое + "<div class=""project-header"">Проект: " + ТекСтрокаПроект.Наименование + "</div>";
    
    Для Каждого СтрокаДок Из ТекСтрокаПроект.Строки Цикл
        ТекстСтатус = "";
        Если СтрокаДок.Просрочен Тогда
            ТекстСтатус = "<span class=""status-error"">(просрочен!)</span>";
        КонецЕсли;
        
        // Используем <br> для гарантированного переноса строки
        Содержимое = Содержимое + "Документ: " + СтрокаДок.Документ + " " + ТекстСтатус + "<br>";
        Содержимое = Содержимое + "Дата возникновения: " + Формат(СтрокаДок.Дата, "ДЛФ=DT") + "<br>";
        Содержимое = Содержимое + "Инициатор: " + СтрокаДок.Инициатор + "<br><br>";
    КонецЦикла;
КонецЦикла;

ТекстПисьма = СтрЗаменить(ТекстHTML, "<!--ТЕЛО_ПИСЬМА-->", Содержимое);

Важный нюанс: при отправке такого письма через объект ИнтернетПочтовоеСообщение, обязательно нужно указать тип текста. Если этого не сделать, получатель увидит сырые HTML-теги.


Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Уведомление о просроченных документах";
Текст = Письмо.Тексты.Добавить(ТекстПисьма);
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;

Способ 2: Работа с табличными документами

Если вам нужно отправить сложную таблицу с итогами, раскрашенными ячейками и рамками, удобнее всего нарисовать её в обычном макете 1С (Табличный документ). Рассмотрим этот алгоритм:

  1. Создаем и заполняем ТабличныйДокумент данными, как для обычного отчета.
  2. Сохраняем его во временный файл в формате HTML, используя метод Записать().
  3. Считываем содержимое файла в строку и передаем в тело письма.

Этот метод хорош тем, что вам не нужно вручную писать HTML-теги для таблиц (<table>, <tr>, <td>), 1С сделает это автоматически.

Способ 3: Хитрости для обычного текста (Plain Text)

Если по каким-то причинам вы не можете использовать HTML, проанализируем, как «обмануть» Outlook и заставить его сохранять переносы в обычном тексте:

Рекомендации по оформлению

При динамической сборке писем всегда помните о безопасности данных. Если данные вставляются из справочников, где пользователи могут использовать спецсимволы (например, кавычки или знаки <, >), их желательно экранировать, чтобы не «сломать» HTML-верстку. Также старайтесь использовать инлайновые стили (атрибут style прямо внутри тега), так как многие почтовые сервисы (например, Gmail или веб-интерфейсы корпоративных почт) вырезают блок <style> из заголовка письма.

Выяснив причину некорректного отображения и применив подход с HTML-шаблонами, мы получим профессионально оформленные письма, которые будут одинаково хорошо читаться на любых устройствах.

← На главную