Отправка электронной почты из 1С программно

 Задача - отправлять электронных сообщений с уведомлением клиентов об изменении статусов их заказов. Конфигурация: Управление нашей фирмой 1.6.  

 Для при реализации я задействовал типовой функционал БСП. Сначала я создаю документ "Сообщение" на основании Заказа программно, затем выполняю отправку электронного сообщения: 

&НаСервере
Процедура СоздатьОтправитьЭлектронноеСообщениеИз1С(Источник)
Событие = Документы.Событие.СоздатьДокумент();
		Событие.Заполнить(Источник.Ссылка);
		Событие.ТипСобытия    = Перечисления.ТипыСобытий.ЭлектронноеПисьмо;
		Событие.Автор         = ПараметрыСеанса.ТекущийПользователь;
		Событие.Ответственный = ПараметрыСеанса.ТекущийПользователь;
		Событие.Дата          = ТекущаяДата();
		Событие.Тема          = НастройкаСостояния.Шаблон;
		Событие.УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
		СодержаниеПисьма      = ПолучитьСодержанияПисьма(Источник.Ссылка, НастройкаСостояния.Шаблон,СтруктураДопПараметров);
		Событие.Содержание    = СодержаниеПисьма.Содержание;
		Событие.Важность      = Перечисления.ВариантыВажности.Обычная;
		Событие.Состояние     = Справочники.СостоянияСобытий.Запланировано; 
		Событие.ВходящееИсходящееСобытие = Перечисления.ВходящееИсходящееСобытие.Исходящее;
		стр                   = Событие.ДополнительныеРеквизиты.Добавить();
		Свойство              = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Состояние заказа клиента");
		стр.Свойство          = Свойство;
		стр.Значение          = СокрЛП(Источник.СостояниеЗаказа);
		Событие.СодержаниеHTML= СодержаниеПисьма.СодержаниеHTML; 
		стрУч                 = Событие.Участники.Добавить();
		стрУч.Контакт         = Источник.Контрагент;
		стрУч.КакСвязаться    = Источник.Контрагент.КонтактнаяИнформация.Найти(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты).АдресЭП;
		Событие.Записать(РежимЗаписиДокумента.Запись);
		Успешно = ОтправкаПисьма(Событие);
КонецПроцедуры

&НаСервере
Функция ОтправкаПисьма(Объект)
	Картинки = Новый Структура;
	ФорматированныйДокумент = Новый ФорматированныйДокумент;
	ФорматированныйДокумент.УстановитьHTML(Объект.СодержаниеHTML, Картинки);
	ПочтовыйАдресПолучателя = "";
	Для Каждого Получатель Из Объект.Участники Цикл
		ПочтовыйАдресПолучателя = ПочтовыйАдресПолучателя + Получатель.КакСвязаться + "; ";
	КонецЦикла;
	СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(ПочтовыйАдресПолучателя, 2);
	Попытка
		ПриведенныйПочтовыйАдрес = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПочтовыйАдресПолучателя);
	Исключение
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
		Возврат Ложь;
	КонецПопытки;
	
	ПараметрыПисьма = Новый Структура;
	Если ЗначениеЗаполнено(ПриведенныйПочтовыйАдрес) Тогда
		ПараметрыПисьма.Вставить("Кому", ПриведенныйПочтовыйАдрес);
	КонецЕсли;
	Если ЗначениеЗаполнено(Объект.Тема) Тогда
		ПараметрыПисьма.Вставить("Тема", Строка(Объект.Тема));
	КонецЕсли;
	
	//АдресПолучателяСкрытойКопии = ПолучитьАдресПолучателяСкрытойКопии();
	//Если ЗначениеЗаполнено(АдресПолучателяСкрытойКопии) Тогда
	//	ПараметрыПисьма.Вставить("СлепыеКопии", АдресПолучателяСкрытойКопии);
	//КонецЕсли;
	//
	ВложенияПисьма = Новый Соответствие;
	ТелоПисьма = "";
	ВложенияКартинки = Новый Структура;
	ФорматированныйДокумент.ПолучитьHTML(ТелоПисьма, ВложенияКартинки);
	
	Если ВложенияКартинки.Количество() > 0 Тогда
		УправлениеНебольшойФирмойВзаимодействия.ДобавитьВложенияКартинкиВПисьмо(Объект.СодержаниеHTML, ВложенияПисьма, ВложенияКартинки);
	КонецЕсли;
	
	ДобавитьВложенияФайлы(ВложенияПисьма);
	
	ПараметрыПисьма.Вставить("Тело", ТелоПисьма);
	ПараметрыПисьма.Вставить("ТипТекста", "HTML");
	ПараметрыПисьма.Вставить("Вложения", ВложенияПисьма);
	Попытка
		Успешно = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма);
		Успешно = Истина;
	Исключение
		Успешно = Ложь;
	КонецПопытки;
	Если Успешно Тогда
		
		Объект.Состояние = ПредопределенноеЗначение("Справочник.СостоянияСобытий.Завершено");
		//Объект.Дата = ОбщегоНазначенияКлиент.ДатаСеанса();
		Объект.НачалоСобытия = Объект.Дата;
		Объект.ОкончаниеСобытия = Объект.Дата;
		Объект.Записать(РежимЗаписиДокумента.Запись);
	КонецЕсли;
	Возврат Успешно;
КонецФункции

&НаСервере
Функция ПолучитьСодержанияПисьма(Заказ,ТемаСобытия,СтруктураДопПараметров)
	
	ФорматированныйДокумент = Новый ФорматированныйДокумент;
	
	Содержание = ТемаСобытия.Содержание;
	
	Содержание = СтрЗаменить(Содержание,"Здравствуйте,","Здравствуйте, "+СокрЛП(Заказ.Контрагент)+"!");
	Если СтруктураДопПараметров.Свойство("СуммаДоставки") Тогда
	  Содержание = СтрЗаменить(Содержание,"составит   рублей.","составит "+СтруктураДопПараметров.СуммаДоставки+" рублей.");
    КонецЕсли;
	Если СтруктураДопПараметров.Свойство("СуммаДоплатыЗаДоставку") Тогда
	  Содержание = СтрЗаменить(Содержание,"в размере   рублей","в размере "+СтруктураДопПараметров.СуммаДоплатыЗаДоставку+" рублей");
    КонецЕсли;
    Если СтруктураДопПараметров.Свойство("НомерПочтовогоОтправления") Тогда
	  Содержание = СтрЗаменить(Содержание,"656000"," "+СтруктураДопПараметров.НомерПочтовогоОтправления+".");
	КонецЕсли;
	
	ФорматированныйДокумент.УстановитьФорматированнуюСтроку(Новый ФорматированнаяСтрока(Содержание));
	
	ТекстHTML = "";
	Картинки = Новый Структура;
	ФорматированныйДокумент.ПолучитьHTML(ТекстHTML, Картинки);
	
	СодержаниеHTML = ТекстHTML;
	
	Структура = Новый Структура("Содержание, ФорматированныйДокумент, СодержаниеHTML",Содержание,ФорматированныйДокумент,СодержаниеHTML);
	
	Возврат Структура;
КонецФункции

 

 

Контакты:

Телефон: +7 963 570 26 00

E-mail: al_zzz@mail.ru

Дизайн сайта:

Веб-дизайн и верстка: Зелёнкина Елена

8 963 578 05 35, lena_431@mail.ru