---
title: Библиотека для работы с почтой БСП. Отправка HTML сообщений
slug: примеры-сниппеты-бсп-и-типовые-работа-с-почтой/библиотека-для-работы-с-почтой-бсп-отправка-html-сообщений
---

```bsl
#Область ПрограммныйИнтерфейс

// Процедура - Отправить письмо
// 
// Параметры:
//  АдресЭлектроннойПочты         - Строка    - 
//  ТекстСообщения                - Строка    - 
//  ТемаСообщения                 - Строка    - 
//  ДополнительныеПараметрыПисьма - Структура - см. описание аргумента "ПараметрыПисьма" из РаботаСПочтовымиСообщениями.ПодготовитьПисьмо
//
Процедура ОтправитьПисьмо(АдресЭлектроннойПочты, ТекстСообщения, ТемаСообщения, ДополнительныеПараметрыПисьма = Неопределено) Экспорт

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

КонецПроцедуры

// Процедура - Отправить письмо на электронную почту пользователю
// 
// Параметры:
//  Пользователь                  - СправочникСсылка.Пользователи - 
//  ТекстСообщения                - Строка                        - 
//  ТемаСообщения                 - Строка                        - 
//  ДобавитьОбращение             - Булево                        - Если ИСТИНА, то к тексту сообщения добавится обращение вида "Уважаемый ...!".
//																	Используйте, если тело сообщения - простой текст. HTML сломает
//  ДополнительныеПараметрыПисьма - Структура                     - см. описание аргумента "ПараметрыПисьма" из РаботаСПочтовымиСообщениями.ПодготовитьПисьмо
//
Процедура ОтправитьПисьмоПользователю(Пользователь, ТекстСообщения, ТемаСообщения, ДобавитьОбращение = Ложь, ДополнительныеПараметрыПисьма = Неопределено) Экспорт
	
	АдресЭлектроннойПочты = УЗГА_УправлениеКонтактнойИнформацией.АдресЭлектроннойПочтыПользователя(Пользователь);
	
	Если Не ЗначениеЗаполнено(АдресЭлектроннойПочты) Тогда
		ЗаписьЖурналаРегистрации("(УЗГА) Рассылка уведомлений на электронную почту", 
			УровеньЖурналаРегистрации.Ошибка,,,
			СтрШаблон("Ошибка отправки сообщения. Не удалось получить адрес электронной почты пользователя %1", Пользователь));
		Возврат;
	КонецЕсли;
	
	Если ДобавитьОбращение Тогда
		ТекстСообщения = СтрШаблон("%1%2%3", ОбращениеКПользователю(Пользователь), Символы.ПС, ТекстСообщения);
	КонецЕсли;
			
	ОтправитьПисьмо(АдресЭлектроннойПочты, ТекстСообщения, ТемаСообщения, ДополнительныеПараметрыПисьма);

КонецПроцедуры

// Процедура - Отправить письмо на электронную почту списку пользователей
// 
// Параметры:
//  СписокПользователей  - Массив Из СправочникСсылка.Пользователи - 
//  ТекстСообщения       - Строка                                  - 
//  ТемаСообщения        - Строка                                  - 
//  ДобавитьОбращение    - Булево                                  - Если ИСТИНА, то к тексту сообщения добавится обращение вида "Уважаемый ...!"
//																	Используйте, если тело сообщения - простой текст. HTML сломает
//  ДополнительныеПараметрыПисьма - Структура                    - см. описание аргумента "ПараметрыПисьма" из РаботаСПочтовымиСообщениями.ПодготовитьПисьмо
Процедура ОтправитьПисьмоСпискуПользователей(СписокПользователей, ТекстСообщения, ТемаСообщения, ДобавитьОбращение = Ложь, ДополнительныеПараметрыПисьма = Неопределено) Экспорт
	
	Для Каждого Пользователь Из СписокПользователей Цикл	
		ОтправитьПисьмоПользователю(Пользователь, ТекстСообщения, ТемаСообщения, ДобавитьОбращение, ДополнительныеПараметрыПисьма);		
	КонецЦикла;
	
КонецПроцедуры

// Процедура - Отправить HTMLПисьмо пользователю
// 
// Параметры:
//  Пользователь                  - СправочникСсылка.Пользователи - Пользователь, кому необходимо отправить сообщение
//  HTMLТекстСообщения            - Строка                        - HTML-тело сообщения. Для формирования используйте фунцкию СообщениеHTML()
//  ТемаСообщения                 - Строка                        - Тема сообщения
//  ДополнительныеПараметрыПисьма - Структура                     - см. описание аргумента "ПараметрыПисьма" из РаботаСПочтовымиСообщениями.ПодготовитьПисьмо
Процедура ОтправитьHTMLПисьмоПользователю(Пользователь, HTMLТекстСообщения, ТемаСообщения, ДополнительныеПараметрыПисьма = Неопределено) Экспорт

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

КонецПроцедуры

// Процедура - Отправить HTMLПисьмо по списку пользователей
// 
// Параметры:
//  СписокПользователей           - Массив Из СправочникСсылка.Пользователи - Список пользователей
//  HTMLТекстСообщения            - Строка                                  - HTML-тело сообщения. Для формирования используйте фунцкию СообщениеHTML()
//  ТемаСообщения                 - Строка                                  - ТЕма сообщения
//  ДополнительныеПараметрыПисьма - Структура                               - см. описание аргумента "ПараметрыПисьма" из РаботаСПочтовымиСообщениями.ПодготовитьПисьмо
Процедура ОтправитьHTMLПисьмоПоСпискуПользователей(СписокПользователей, HTMLТекстСообщения, ТемаСообщения, ДополнительныеПараметрыПисьма = Неопределено) Экспорт

	Для Каждого Пользователь Из СписокПользователей Цикл
		ОтправитьHTMLПисьмоПользователю(Пользователь, HTMLТекстСообщения, ТемаСообщения, ДополнительныеПараметрыПисьма);
	КонецЦикла;

КонецПроцедуры

// Функция - Обращение к пользователю
// 
// Параметры:
//  Пользователь - СправочникСсылка.Пользователи - 
// 
// Возвращаемое значение:
// Строка - Возвращает обращение вида "Уважаемый <Фамилия Имя Отчество>" с учетом пола.
// Если не удается определить пол, возвращается "Уважаемый(ая)...",
// если не удается распарсить ФИО, вместо <Фамилия Имя Отчество> выводится "пользователь"
Функция ОбращениеКПользователю(Пользователь) Экспорт
	
	Обращение = "Уважаемый(ая)";
	
	ФИО = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь, "Наименование", Истина);
	
	Если ЗначениеЗаполнено(ФИО) Тогда
		
		ЧастиИмени = СтрРазделить(ФИО, " ", Ложь);
		
		Если ЧастиИмени.Количество() = 3 Тогда
			
			Отчество = СокрЛП(ЧастиИмени.Получить(2));
			
			Если СтрЗаканчиваетсяНа(НРег(Отчество), "вич") Тогда
				Обращение = "Уважаемый";
			ИначеЕсли СтрЗаканчиваетсяНа(НРег(Отчество), "вна") Тогда
				Обращение = "Уважаемая";
			КонецЕсли;
			
		КонецЕсли;
	Иначе
		ФИО = "пользователь";
	КонецЕсли;
	
	Возврат СтрШаблон("%1 %2!", Обращение, ФИО);
	
КонецФункции

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция АдресЭлектроннойПочтыПользователя(Пользователь)
	
	АдресЭлектроннойПочты = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(Пользователь, 
		Справочники.ВидыКонтактнойИнформации.EmailПользователя);
		
	Результат = "";
		
	Если ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(АдресЭлектроннойПочты, Ложь) Тогда
		Результат = АдресЭлектроннойПочты;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

#КонецОбласти
```