Рассмотрим задачу, с которой часто сталкиваются разработчики при автоматизации почтовых рассылок из 1С. Зачастую возникает необходимость не просто приложить файл к письму, а сделать так, чтобы он органично вписался в подпись или текст сообщения, отображаясь непосредственно при открытии письма без необходимости скачивания вложения. Разберем по шагам, как реализовать этот механизм с помощью протокола Content-ID.
Для того чтобы почтовый клиент корректно распознал вложенный файл не как отдельный документ, а как часть разметки HTML, нам необходимо связать идентификатор вложения с тегом img в теле письма. Стандарт MIME позволяет нам присвоить каждому вложению уникальный Content-ID (CID). Если мы укажем этот CID в атрибуте src тега img, почтовый сервер и клиент поймут, что именно этот фрагмент данных нужно отрисовать в указанном месте.
Давайте проанализируем процесс отправки письма с использованием объекта Письмо. Важно понимать, что процесс состоит из двух этапов: подготовки вложения и правильной вставки этого вложения в 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.Отправить(ПараметрыПодключения, Письмо)
;
ПриложитьДанные является центральным элементом. Мы передаем в него поток данных, имя файла, MIME-тип и, что самое важное, уникальный идентификатор. Мы генерируем его с помощью новый Ууид(), чтобы гарантировать уникальность в рамках письма.Заменить для того, чтобы подставить полученный идентификатор вложения (свойство Вложение.Ид) непосредственно в шаблон HTML.src="cid:{ИдентификаторВложения}". Именно префикс cid: дает понять почтовой программе, что источник находится внутри самого письма, а не по внешней ссылке.Чтобы ваша подпись или баннер отображались корректно у всех получателей, примите во внимание следующие советы:
data:image/png;base64,... часто блокируется современными почтовыми системами в целях безопасности. Метод с использованием CID является наиболее надежным и профессиональным стандартом.image/png). Некорректный тип может привести к тому, что почтовый клиент отобразит картинку как обычный прикрепленный файл, не интегрируя его в тело письма.width и height) в атрибутах тега img непосредственно в HTML-коде.Следуя этим рекомендациям и используя представленный подход, вы сможете профессионально оформлять письма, отправляемые из 1С, делая их более информативными и эстетически привлекательными для конечных пользователей.