При автоматизации рассылок из 1С:Предприятия разработчики часто сталкиваются с тем, что изображения, встроенные в HTML-текст письма, дублируются в списке вложений у получателя. Это выглядит непрофессионально и может перегружать интерфейс почтового клиента. В этой статье мы разберем механизмы работы платформы с почтовыми сообщениями и выясним, как правильно внедрять графический контент. Подобные навыки необходимы, например, для автоматизации отправки счетов и договоров из 1С:Бухгалтерии 3.0 по электронной почте.
Проанализируем поведение платформы 1С. Когда мы используем объект ИнтернетПочтовоеСообщение и устанавливаем тип текста как ТипТекстаПочтовогоСообщения.HTML, платформа автоматически парсит содержимое текста. Если в теге <img> указан локальный путь к файлу на диске сервера (например, C:/img.png), 1С пытается найти этот файл, самостоятельно прикрепить его к письму и заменить путь в HTML на внутреннюю ссылку. Именно эта автоматизация приводит к тому, что картинка отображается и в тексте, и в списке прикрепленных файлов.
Это наиболее корректный и стандартный способ для формирования электронных писем. Его суть заключается в явном связывании вложенного файла с местом в HTML-коде. Рассмотрим этот процесс по шагам:
Вложения объекта сообщения.Идентификатор. Это должна быть уникальная строка без пробелов.<img>, вместо пути к файлу указывается протокол cid: и назначенный идентификатор.Разберем пример кода для реализации этого метода:
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Тема = "Тестовое письмо с картинкой";
// Добавляем файл во вложения
КартинкаВложение = Сообщение.Вложения.Добавить("C:\Pictures\Logo.png");
КартинкаВложение.Идентификатор = "MyUniqueLogoID"; // Уникальный ID
// Формируем HTML текст с использованием CID
ТекстHTML = "<html>
|<body>
|<p>Здравствуйте! Посмотрите на наш логотип:</p>
|<img src=""cid:MyUniqueLogoID"">
|</body>
|</html>";
ТекстСообщения = Сообщение.Тексты.Добавить(ТекстHTML, ТипТекстаПочтовогоСообщения.HTML);
Важный нюанс: Использование свойства Идентификатор заставляет почтовые клиенты (такие как Outlook или Gmail) воспринимать вложение как часть оформления (inline-объект), что скрывает его из общего списка файлов. Для автоматизации подобного отображения при выполнении задач подойдёт расширение для вставки картинок в тело письма.
Если по каким-то причинам стандартный метод с cid не подходит, можно попробовать внедрить изображение непосредственно в код страницы в виде текстовой строки (Base64). Однако, как было замечено в обсуждении, прямая вставка data:image в атрибут src тега img часто вызывает ошибку "Файл не обнаружен" в 1С, так как платформа ошибочно принимает эту строку за путь к файлу.
Выясним, как обойти это ограничение через использование CSS-стилей. Мы можем задать картинку как фоновое изображение для элемента. Посмотрим на пример:
Текст = "<style>
|.image_box {
| width: 200px;
| height: 100px;
| background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...') no-repeat;
|}
|</style>
|<div class='image_box'></div>";
ИнтернетТекст = Сообщение.Тексты.Добавить();
ИнтернетТекст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;
ИнтернетТекст.Текст = Текст;
Ограничения метода:
Самый простой способ избежать вложений в письме — это загрузить изображение на публичный сервер или облачное хранилище (CDN) и указать в письме прямую ссылку с помощью автоматической выгрузки файлов на FTP или сайт.
Рассмотрим преимущества и недостатки:
// В HTML коде указываем просто URL
ИнтернетТекстПочтовогоСообщения.Текст = "<p>Наш логотип:</p><img src='https://mysite.ru/images/logo.png'>";
Проанализировав все варианты, мы рекомендуем придерживаться следующей логики:
file:///, так как это вызывает ошибки исполнения кода на стороне сервера 1С, если у пользователя или службы сервера нет доступа к указанному каталогу.Соблюдение этих правил позволит вам создавать чистые и корректные письма, которые будут правильно восприниматься любыми почтовыми сервисами. Правильное оформление HTML-текста важно и для автоматической отправки уведомлений об обновлении и архивации баз на электронную почту.