База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как программно вставить картинку в HTML-письмо для отправки через 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 1 месяц, 1 неделя назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
20 января 2026 в 17:00 #35530
Как вставить в html картинку программно для последующей отправки письма
-
20 января 2026 в 17:00 #35531
Олег, привет!
Чтобы программно вставить картинку в HTML-письмо для отправки через 1С, нужно не просто вставить тег
с base64 или ссылкой, а сделать так, чтобы картинка была вложением письма и корректно отображалась у получателя. Вот подробный алгоритм и пример кода на 1С:
1. **Подготовка HTML с тегом
с ссылкой на вложение (CID)**
В HTML-тексте указываешь картинку с атрибутом src=»cid:уникальный_идентификатор_картинки».2. **Добавление картинки как вложения с этим идентификатором**
В объекте письма (ИнтернетПочтовоеСообщение) создаёшь вложение, указываешь двоичные данные картинки, тип содержимого (например, «image/png») и идентификатор (CID).3. **Отправка письма**
Отправляешь письмо через ИнтернетПочта.—
### Пример кода 1С для вставки картинки в HTML-письмо:
1С (Код)12345678910111213141516171819ТаймаутПодключенияПочты = 30000;ПутьККартинке = ПолучитьКаталогВременныхФайлов() + "image.png";ФайлКартинки = Новый Файл(ПутьККартинке);Если ФайлКартинки.Существует() ТогдаПоток = ФайлКартинки.ПолучитьПотокЧтения();ДвоичныеДанные = Новый ДвоичныеДанные;ДвоичныеДанные.Записать(Поток);Поток.Закрыть();ИначеСообщить("Файл картинки не найден");Возврат;КонецЕсли;// ...Почта = Новый ИнтернетПочта;Почта.Подключиться(Профиль, ТаймаутПодключенияПочты);Почта.Послать(Письмо);Почта.Отключиться();—
### Важные моменты:
— **Не используйте вставку картинки в base64 в src**, т.к. многие почтовые клиенты не поддерживают такой формат и картинка не отобразится.
— Используйте вложения сcidи указывайте в HTMLsrc=»cid:идентификатор».
— Если картинка берется из файла, можно использовать методОбработатьТексты(), который автоматически добавит вложения и заменит пути на cid (если в HTML указаны пути к файлам).
— Если используете буфер обмена и ФорматированныйДокумент, то нужно вручную преобразовать base64 в вложения, как в примере из БСП (см. ниже).—
### Альтернативный способ (для ФорматированногоДокумента с base64):
Если у вас есть HTML с картинками в формате
, то нужно:— Найти все такие картинки в тексте.
— Преобразовать base64 в двоичные данные.
— Добавить их как вложения с уникальным cid.
— Заменить в HTMLsrcнаcid:….Пример алгоритма из БСП (упрощённо):
1С (Код)12345678910111213141516171819202122232425262728ЗаменяемыеКартинки = Новый Соответствие;ПозицияПоиска = 1;Пока Истина ЦиклПозиция_img = СтрНайти(ТекстHTML, "<img ", , ПозицияПоиска);Если Позиция_img = 0 Тогда Прервать; КонецЕсли;ПозицияЗакрывающийАтрибут = СтрНайти(ТекстHTML, "/>", , Позиция_img);КартинкаВХ = "src='data:image/png;base64,";Позиция_src = СтрНайти(ТекстHTML, КартинкаВХ, , Позиция_img);Если Позиция_src > ПозицияЗакрывающийАтрибут ТогдаПозицияПоиска = ПозицияЗакрывающийАтрибут;Продолжить;КонецЕсли;ПозицияНачалоКартинки = Позиция_src + СтрДлина(КартинкаВХ);ПозицияКонецКартинки = СтрНайти(ТекстHTML, "'", , ПозицияНачалоКартинки);Строка_base64 = Сред(ТекстHTML, ПозицияНачалоКартинки, ПозицияКонецКартинки - ПозицияНачалоКартинки);ДвоичныеДанныеКартинки = Base64Значение(Строка_base64);ЗаменяемыеКартинки.Вставить(КартинкаВХ + Строка_base64 + "'", ДвоичныеДанныеКартинки);ПозицияПоиска = ПозицияКонецКартинки;КонецЦикла;Для Каждого Картинка Из ЗаменяемыеКартинки ЦиклИдентификатор = Новый УникальныйИдентификатор;Идентификатор = СтрЗаменить(Идентификатор, "-", "_");Вложение = Письмо.Вложения.Добавить(Картинка.Значение, Идентификатор);Вложение.Идентификатор = Идентификатор;Вложение.ТипСодержимого = "image/png";ТекстHTML = СтрЗаменить(ТекстHTML, Картинка.Ключ, "src=""cid:" + Идентификатор + """");КонецЦикла;—
### Рекомендации:
— Если картинка есть на диске, проще использовать метод
ОбработатьТексты(), указав в HTML путь к файлу, например:.
— Если картинка в base64, используйте алгоритм из БСП для преобразования в вложения.
— Не забывайте указывать правильныйContent-Typeдля вложений (image/png, image/jpeg и т.п.).
— Для корректной работы с расширениями файлов в tmp-файлах можно применить патч из статьи, чтобы почтовый клиент не блокировал картинки.—
Если кратко — вставляй в HTML тег с
src=»cid:идентификатор», добавляй картинку как вложение с этим идентификатором, и почтовый клиент покажет картинку корректно.Олег, если нужно — могу помочь с конкретным кодом под твой сценарий.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.
