Создать письмо. Шаблоны сообщений.
////////////////////////////////////////////////////////////////////////////////
// Шаблоны сообщений.
Функция СоздатьПисьмо(Сообщение, УчетнаяЗапись) Экспорт
РезультатОтправкиПисьма = Новый Структура("Отправлено, ОписаниеОшибки", Ложь);
ПисьмоHTML = (Сообщение.ДополнительныеПараметры.ФорматПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML);
НачатьТранзакцию();
Попытка
Письмо = Документы.ЭлектронноеПисьмоИсходящее.СоздатьДокумент();
Письмо.Автор = Пользователи.ТекущийПользователь();
Письмо.Ответственный = Пользователи.ТекущийПользователь();
Письмо.Дата = ТекущаяДатаСеанса();
Письмо.Важность = Перечисления.ВариантыВажностиВзаимодействия.Обычная;
Письмо.Кодировка = КодировкаТекста.UTF8;
Письмо.ОтправительПредставление = Строка(УчетнаяЗапись);
Если ПисьмоHTML Тогда
Письмо.ТекстHTML = Сообщение.Текст;
Письмо.Текст = ПолучитьОбычныйТекстИзHTML(Сообщение.Текст);
Иначе
Письмо.Текст = Сообщение.Текст;
КонецЕсли;
Письмо.Тема = Сообщение.Тема;
Письмо.ТипТекста = ?(ПисьмоHTML, Перечисления.ТипыТекстовЭлектронныхПисем.HTML, Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст);
Письмо.УчетнаяЗапись = УчетнаяЗапись;
Письмо.ВзаимодействиеОснование = Неопределено;
// Заполним реквизиты ВключатьТелоИсходногоПисьма, ОтображатьТелоИсходногоПисьма, УведомитьОДоставке и УведомитьОПрочтении.
НастройкиПользователя = ПолучитьПараметрыРаботыПользователяДляИсходящегоЭлектронногоПисьма(
УчетнаяЗапись, Сообщение.ДополнительныеПараметры.ФорматПисьма, Истина);
ЗаполнитьЗначенияСвойств(Письмо, НастройкиПользователя);
Письмо.УдалятьПослеОтправки = Ложь;
Письмо.Комментарий = КомментарийПоНаименованиюШаблона(Сообщение.ДополнительныеПараметры.Наименование);
СписокПолучателейСпискомЗначений =( ТипЗнч(Сообщение.Получатель) = Тип("СписокЗначений"));
Для Каждого ПолучательПисьма Из Сообщение.Получатель Цикл
НоваяСтрока = Письмо["ПолучателиПисьма"].Добавить();
Если СписокПолучателейСпискомЗначений Тогда
НоваяСтрока.Адрес = ПолучательПисьма.Значение;
НоваяСтрока.Представление = ПолучательПисьма.Представление;
Иначе
НоваяСтрока.Адрес = ПолучательПисьма.Адрес;
НоваяСтрока.Представление = ПолучательПисьма.Представление;
НоваяСтрока.Контакт = ПолучательПисьма.ИсточникКонтактнойИнформации;
КонецЕсли;
КонецЦикла;
Письмо.СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Письмо.ПолучателиПисьма, Ложь);
Письмо.СтатусПисьма = ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(),
Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик,
Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее);
Письмо.ЕстьВложения = (Сообщение.Вложения.Количество() > 0);
РазмерВложений = 0;
РазмерыВложений = Новый Соответствие;
Для Каждого Вложение Из Сообщение.Вложения Цикл
Размер = ПолучитьИзВременногоХранилища(Вложение.АдресВоВременномХранилище).Размер() * 1.5;
РазмерВложений = РазмерВложений + Размер;
РазмерыВложений.Вставить(Вложение.АдресВоВременномХранилище, Размер);
// Если у идентификатора не английские символы, то письмо может быть некорректно обработано.
Если ЗначениеЗаполнено(Вложение.Идентификатор) Тогда
Идентификатор = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(Вложение.Идентификатор);
Письмо.ТекстHTML = СтрЗаменить(Письмо.ТекстHTML, "cid:" + Вложение.Идентификатор, "cid:" + Идентификатор);
Вложение.Идентификатор = Идентификатор;
КонецЕсли;
КонецЦикла;
Письмо.Размер = РазмерВложений + СтрДлина(Письмо.Тема) * 2
+ ?(ПисьмоHTML, СтрДлина(Письмо.ТекстHTML), СтрДлина(Письмо.Текст)) * 2;
Письмо.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее;
Письмо.Записать();
// Добавим вложения
Для Каждого Вложение Из Сообщение.Вложения Цикл
МодульУправлениеЭлектроннойПочтой = ОбщегоНазначения.ОбщийМодуль("УправлениеЭлектроннойПочтой");
Если ПустаяСтрока(Вложение.Идентификатор) Тогда
МодульУправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(Письмо.Ссылка,
Вложение.АдресВоВременномХранилище, Вложение.Представление, РазмерыВложений[Вложение.АдресВоВременномХранилище]);
ИначеЕсли ПисьмоHTML Тогда
ПрисоединенныйФайл = МодульУправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(Письмо.Ссылка,
Вложение.АдресВоВременномХранилище, Вложение.Представление, РазмерыВложений[Вложение.АдресВоВременномХранилище]);
Если ПрисоединенныйФайл <> Неопределено Тогда
ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект();
ПрисоединенныйФайлОбъект.ИДФайлаЭлектронногоПисьма = Вложение.Идентификатор;
ПрисоединенныйФайлОбъект.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Сообщение.ДополнительныеПараметры.Свойство("Предмет") И ЗначениеЗаполнено(Сообщение.ДополнительныеПараметры.Предмет) Тогда
Предмет = Сообщение.ДополнительныеПараметры.Предмет;
Иначе
Предмет = Письмо.Ссылка;
КонецЕсли;
Реквизиты = СтруктураРеквизитовВзаимодействияДляЗаписи(Предмет, Истина);
Реквизиты.Папка = ОпределитьПапкуДляПисьма(Письмо.Ссылка);
РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Письмо.Ссылка, Реквизиты);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ИнформацияОбОшибке = ИнформацияОбОшибке();
ШаблонТекстаСообщения = НСтр("ru = 'Не удалось сформировать письмо по причине:
|%1'");
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Ошибка,, Письмо,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаСообщения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)));
РезультатОтправкиПисьма.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаСообщения, КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Возврат РезультатОтправкиПисьма;
КонецПопытки;
Попытка
ИдентификаторПисьма = ВыполнитьОтправкуПисьма(Письмо);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ШаблонТекстаСообщения = НСтр("ru = 'Не удалось отправить письмо по причине:
|%1'");
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Ошибка,, Письмо,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаСообщения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)));
РезультатОтправкиПисьма.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаСообщения, КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Возврат РезультатОтправкиПисьма;
КонецПопытки;
Если НЕ Письмо.УдалятьПослеОтправки Тогда
Попытка
Письмо.ИдентификаторСообщения = ИдентификаторПисьма;
Письмо.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено;
Письмо.ДатаОтправления = ТекущаяДатаСеанса();
Письмо.Записать(РежимЗаписиДокумента.Запись);
ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма(
Письмо.Ссылка, ОпределитьПапкуДляПисьма(Письмо.Ссылка));
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ШаблонТекстаСообщения = НСтр("ru = 'Не удалось сохранить письмо в программе после успешной отправки по причине:
|%1'");
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Ошибка,, Письмо,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаСообщения, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)));
РезультатОтправкиПисьма.Отправлено = Истина;
РезультатОтправкиПисьма.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаСообщения, КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Возврат РезультатОтправкиПисьма;
КонецПопытки;
Иначе
Письмо.Прочитать();
Письмо.Удалить();
КонецЕсли;
РезультатОтправкиПисьма.Отправлено = Истина;
Возврат РезультатОтправкиПисьма;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
СоздатьЭлектронноеПисьмо (БСП)
СоздатьНовоеПисьмоПодготовитьВложения (БСП)
СоздатьНовоеПисьмоПроверкаУчетнойЗаписиВыполнена (БСП)