Проблема, решаемая в данной статье, следующая.
В БСП и других конфигурациях есть встроенный "почтовик". В нем есть возможность создать письмо в формате html. Для этого используется объект ФорматированныйДокумент. В этот объем в т.ч. можно через буфер обмена вставить скриншот.
Проблема в том, что картинки письма, отправленного в таком виде, для получателя будут не видны.
Техническая проблема выражается в том, что текст html выглядит так: <img src='data:image/png;base64,[строка base]'>, где параметр [строка base] содержит двоичные данные картинки, преобразованной по base64. Для движка mail.ru или любого другого сервера (кроме самой 1С) - это будет непонятный набор символов, поэтому получатель ничего и не увидит.
Чтобы решить эту проблему, нужно преобразовать src в общепринятый вид и поместить картинку как вложение. Ниже приводится алгоритм, который это и делает. Данный алгоритм для БСП был помещен в общий модуль РаботаСПочтовымиСообщениямиСлужебный в функцию ОтправитьСообщение перед строкой Текст = Письмо.Тексты.Добавить(Тело).
Вот сам алгоритм:
ЗаменяемыеКартинки = Новый Соответствие; //!!!
ПозицияПоиска = 1;
Пока Истина Цикл
Позиция_img = СтрНайти(Тело,"<img ",,ПозицияПоиска); //!!!
Если Позиция_img = 0 Тогда Прервать; КонецЕсли;
ПозицияЗакрывающийАтрибут = СтрНайти(Тело,">",,Позиция_img); //!!!
КартинкаВХ = "src='data:image/png;base64,";
Позиция_src = СтрНайти(Тело,КартинкаВХ,,Позиция_img);
Если Позиция_src > ПозицияЗакрывающийАтрибут Тогда
ПозицияПоиска = ПозицияЗакрывающийАтрибут;
Продолжить;
КонецЕсли;
ПозицияНачалоКартинки = Позиция_src + СтрДлина(КартинкаВХ);
ПозицияКонецКартинки = СтрНайти(Тело,"'",,ПозицияНачалоКартинки);
Строка_base64 = Сред(Тело,ПозицияНачалоКартинки,ПозицияКонецКартинки-ПозицияНачалоКартинки);
ДвоичныеДанныеКартинки = Base64Значение(Строка_base64);
ЗаменяемыеКартинки.Вставить(КартинкаВХ+Строка_base64+"'",ДвоичныеДанныеКартинки);
ПозицияПоиска = ПозицияКонецКартинки;
КонецЦикла;
Для Каждого ЗаменяемаяКартинка Из ЗаменяемыеКартинки Цикл
ИдентификаторКартинки = Новый УникальныйИдентификатор;
ИдентификаторКартинки = СтрЗаменить(ИдентификаторКартинки,"-","_");
НовоеВложение = Письмо.Вложения.Добавить(ЗаменяемаяКартинка.Значение,ИдентификаторКартинки);
НовоеВложение.Идентификатор = ИдентификаторКартинки;
НовоеВложение.ТипСодержимого = "image/png";
Тело = СтрЗаменить(Тело,ЗаменяемаяКартинка.Ключ,"src=""cid:"+ИдентификаторКартинки+"""");
КонецЦикла;
Может быть, кому-то пригодится.