Как правильно вставить изображение в подпись или тело письма при отправке из 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

Рассмотрим задачу, с которой часто сталкиваются разработчики при автоматизации почтовых рассылок из 1С. Зачастую возникает необходимость не просто приложить файл к письму, а сделать так, чтобы он органично вписался в подпись или текст сообщения, отображаясь непосредственно при открытии письма без необходимости скачивания вложения. Разберем по шагам, как реализовать этот механизм с помощью протокола Content-ID.

Понимание механизма CID (Content-ID)

Для того чтобы почтовый клиент корректно распознал вложенный файл не как отдельный документ, а как часть разметки HTML, нам необходимо связать идентификатор вложения с тегом img в теле письма. Стандарт MIME позволяет нам присвоить каждому вложению уникальный Content-ID (CID). Если мы укажем этот CID в атрибуте src тега img, почтовый сервер и клиент поймут, что именно этот фрагмент данных нужно отрисовать в указанном месте.

Реализация отправки через 1С

Давайте проанализируем процесс отправки письма с использованием объекта Письмо. Важно понимать, что процесс состоит из двух этапов: подготовки вложения и правильной вставки этого вложения в HTML-шаблон.

Рассмотрим пример кода, который позволяет выполнить данную задачу:


метод ОтправитьПисьмо(Параметры: Подключение)

    знч Отправитель = "d.zakirov@example.com"
    знч Получатели = "All@example.com"
    знч Тема = "Обновление 1С УТ с 9.30 до 9.35"

    знч ФайлШаблона = новый Файл(".\\inside\\Обновление в 9.30.html")
    знч ЧтениеТекста = ФайлШаблона.ОткрытьПотокЧтения()
    пер ТекстПисьма = ЧтениеТекста.ПрочитатьКакСтроку(Кодировка.Koi8r)

    пер Лого = новый Файл(".\\inside\\logo.png")
    исп ПотокЛого = Лого.ОткрытьПотокЧтения()

    пер Письмо = новый Письмо(Отправитель, Получатели, Тема)
    Письмо.УстановитьЗаголовок("Content-Type", "text/html")
    пер Вложение = Письмо.ПриложитьДанные(ПотокЛого, "logo.png", "image/png", (новый Ууид()).ВСтроку(), Истина)
    ТекстПисьма = ТекстПисьма.Заменить("{ИдентификаторВложения}", Вложение.Ид)
    Письмо.УстановитьТекстКакСтроку(ТекстПисьма, ВидТекстаПисьма.Html)

    пер Аутентификация = новый АутентификацияПочтыПоПаролю("d.zakirov@example.com", "mypassword")
    пер ПараметрыПодключения = новый ПараметрыПодключенияSmtp("mail.example.local", 465, Аутентификация)

    КлиентSmtp.Отправить(ПараметрыПодключения, Письмо)
;

Разбор ключевых моментов кода

  1. Создание вложения: Метод ПриложитьДанные является центральным элементом. Мы передаем в него поток данных, имя файла, MIME-тип и, что самое важное, уникальный идентификатор. Мы генерируем его с помощью новый Ууид(), чтобы гарантировать уникальность в рамках письма.
  2. Связывание с HTML: Мы используем метод Заменить для того, чтобы подставить полученный идентификатор вложения (свойство Вложение.Ид) непосредственно в шаблон HTML.
  3. Формат HTML: В самом файле шаблона мы используем конструкцию src="cid:{ИдентификаторВложения}". Именно префикс cid: дает понять почтовой программе, что источник находится внутри самого письма, а не по внешней ссылке.

Важные рекомендации при настройке

Чтобы ваша подпись или баннер отображались корректно у всех получателей, примите во внимание следующие советы:

Следуя этим рекомендациям и используя представленный подход, вы сможете профессионально оформлять письма, отправляемые из 1С, делая их более информативными и эстетически привлекательными для конечных пользователей.

← На главную