В этой статье приведем пример процедуры (функции) для отправки письма по электронной почте из 1С с использованием механизмов БСП с вложениями. В качестве вложений будут выступать табличные документы, при этом мы не будем их сохранять в виде временных файлов, а будем сразу прикреплять к письму.
Для отправки почты нам потребуется настроенная учетная запись электронной почты. Обычно в типовых конфигурациях она настраивается через раздел Администрирование — Органайзер — Настройки почты.
Кроме того, потребуется уже сформированный Табличный документ, который мы отправим в качестве вложения. Этот документ должен быть помещен во временное хранилище. Это делается следующим образом:
1 |
АдресХранилища = ПоместитьВоВременноеХранилище(ТабДок, ЭтаФорма.УникальныйИдентификатор); |
ТабДок — переменная с табличный документом.
ЭтаФорма.УникальныйИдентификатор — идентификатор формы указывается для того, чтобы табличный документ был удален из временного хранилища после закрытия формы, с которой мы вызвали процедуру. Если процедура вызывается не с формы, можно указать другой параметр. Подробнее можно прочитать в синтакс-помощнике.
Далее вызываем процедуру отправки письма:
1 |
Отправлено = ОтправитьТабличныйДокументЭлектроннойПочтойКакPDF(УчетнаяЗаписьЭлектроннойПочты, АдресЭП, АдресХранилища); |
УчетнаяЗаписьЭлектроннойПочты — ссылка на элемент справочника УчетныеЗаписиЭлектроннойПочты.
АдресЭП — строка с адресом электронной почты, на который отправляем письмо.
АдресХранилища — адрес хранилища с табличным документом.
И теперь формируем и отправляем письмо:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
Функция ОтправитьТабличныйДокументЭлектроннойПочтойКакPDF(УчетнаяЗаписьПочтыОтправителя, ПочтаПолучателя, АдресТабличногоДокументаВоВременномХранилище) Если УчетнаяЗаписьПочтыОтправителя = Неопределено Или УчетнаяЗаписьПочтыОтправителя.Пустая() Тогда Возврат Ложь; КонецЕсли; ТабДок = ПолучитьИзВременногоХранилища(АдресТабличногоДокументаВоВременномХранилище); ПотокФайла = Новый ПотокВПамяти(); ТабДок.Записать(ПотокФайла, ТипФайлаТабличногоДокумента.PDF); ДвоичныеДанныеФайла = ПотокФайла.ЗакрытьИПолучитьДвоичныеДанные(); ВременноеХранилищеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла, Новый УникальныйИдентификатор); Вложения = Новый Массив; ОписаниеВложения = Новый Структура("Представление, АдресВоВременномХранилище", "Вложение.pdf", ВременноеХранилищеФайла); Вложения.Добавить(ОписаниеВложения); ПараметрыПисьма = Новый Структура; ПараметрыПисьма.Вставить("Кому", ПочтаПолучателя); ПараметрыПисьма.Вставить("Тема", "Тема письма"); ПараметрыПисьма.Вставить("Тело", "Текст письма"); ПараметрыПисьма.Вставить("ТипТекста", "ПростойТекст"); ПараметрыПисьма.Вставить("Вложения", Вложения); Попытка Идентификатор = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗаписьПочтыОтправителя, ПараметрыПисьма); Если ЗначениеЗаполнено(Идентификатор) Тогда Возврат Истина; КонецЕсли; Исключение ЗаписьЖурналаРегистрации("Отправка письма " + ПочтаПолучателя, УровеньЖурналаРегистрации.Ошибка,,,ОписаниеОшибки()); Сообщить("Отправка письма " + ПочтаПолучателя + ": " + ОписаниеОшибки()); Возврат Ложь; КонецПопытки; КонецФункции |
Функция возвращает значение Истина, если письмо отправлено успешно и Ложь, если не отправлено. При неудачной отправке делается запись в журнал регистрации.