1С 8.3 БСП ОтправитьПочтовоеСообщение
Данные > 1С 8.3 БСП > Почтовые сообщения и e-mail
Перейти в раздел примеры кода 1С 8.3:
1С 8.3 БСП ОтправитьПочтовоеСообщение. До версии 3.1.1 Выполняет отправку почтового сообщения.
Метод БСП
Результат = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, Письма, ТекстОшибки);
//
//
// Выполняет отправку почтовых сообщений.
// Функция может вызвать исключение, которое требуется обработать.
//
// Параметры:
// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - ссылка на
// учетную запись электронной почты.
// ПараметрыОтправки - Структура - содержит всю необходимую информацию о письме:
//
// * Кому - Массив
// - Строка - интернет адреса получателей письма.
// - Массив - коллекция структур адресов:
// * Адрес - Строка - почтовый адрес (должно быть обязательно заполнено).
// * Представление - Строка - имя адресата.
// - Строка - интернет-адреса получателей письма, разделитель - ";".
//
// * ПолучателиСообщения - Массив - массив структур, описывающий получателей:
// ** Адрес - Строка - почтовый адрес получателя сообщения.
// ** Представление - Строка - представление адресата.
//
// * Копии - Массив
// - Строка - адреса получателей копий письма. См. описание поля Кому.
//
// * СкрытыеКопии - Массив
// - Строка - адреса получателей скрытых копий письма. См. описание поля Кому.
//
// * Тема - Строка - (обязательный) тема почтового сообщения.
// * Тело - Строка - (обязательный) текст почтового сообщения (простой текст в кодировке win-1251).
// * Важность - ВажностьИнтернетПочтовогоСообщения
//
// * Вложения - Массив - файлы, которые необходимо приложить к письму (описания в виде структур):
// ** Представление - Строка - имя файла вложения;
// ** АдресВоВременномХранилище - Строка - адрес двоичных данных вложения во временном хранилище.
// ** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма).
// ** Идентификатор - Строка - (необязательный) используется для отметки картинок, отображаемых в теле письма.
//
// * АдресОтвета - Соответствие
// - Строка - см. описание поля Кому.
// * ИдентификаторыОснований - Строка - идентификаторы оснований данного письма.
// * ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке.
// * УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке.
// * УведомитьОПрочтении - Булево - необходимость запроса уведомления о прочтении.
// * ТипТекста - Строка
// - ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем
// - ТипТекстаПочтовогоСообщения - определяет тип
// переданного теста допустимые значения:
// HTML/ТипыТекстовЭлектронныхПисем.HTML - текст почтового сообщения в формате HTML.
// ПростойТекст/ТипыТекстовЭлектронныхПисем.ПростойТекст - простой текст почтового сообщения.
// Отображается "как есть" (значение по
// умолчанию).
// РазмеченныйТекст/ТипыТекстовЭлектронныхПисем.РазмеченныйТекст - текст почтового сообщения в формате
// Rich Text.
// * Соединение - ИнтернетПочта - существующее соединение с почтовым сервером. Если не указано, то создается новое.
// * ПротоколПочты - Строка - если указано значение "IMAP", то письмо будет передано по протоколу IMAP, если по
// указано значение "Все", то по протоколу SMTP и по протоколу IMAP, если ничего не указано
// то по протоколу SMTP. Параметр имеет смысл, только наличии действующего соединения,
// указанного в параметр Соединение. В противном случае протокол будет определен
// автоматически при установке соединения.
// * ИдентификаторСообщения - Строка - (возвращаемый параметр) идентификатор отправленного почтового сообщения на SMTP-сервере;
// * ИдентификаторСообщенияОтправкаIMAP - Строка - (возвращаемый параметр) идентификатор отправленного почтового
// сообщения на IMAP сервере;
// * ОшибочныеПолучатели - Соответствие - (возвращаемый параметр) список адресов, по которым отправка не выполнена.
// См. возвращаемое значение метода ИнтернетПочта.Послать() в синтакс-помощнике.
//
// УдалитьСоединение - ИнтернетПочта - параметр устарел, см. параметр ПараметрыОтправки.Соединение.
// УдалитьПротоколПочты - Строка - параметр устарел, см. параметр ПараметрыОтправки.ПротоколПочты.
//
// Возвращаемое значение:
// Строка - идентификатор отправленного сообщения.
//
Функция ОтправитьПочтовоеСообщение(Знач УчетнаяЗапись, Знач ПараметрыОтправки,
Знач УдалитьСоединение = Неопределено, УдалитьПротоколПочты = "") Экспорт
Если УдалитьСоединение <> Неопределено Тогда
ПараметрыОтправки.Вставить("Соединение", УдалитьСоединение);
КонецЕсли;
Если Не ПустаяСтрока(УдалитьПротоколПочты) Тогда
ПараметрыОтправки.Вставить("ПротоколПочты", УдалитьПротоколПочты);
КонецЕсли;
Если ТипЗнч(УчетнаяЗапись) <> Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты")
Или НЕ ЗначениеЗаполнено(УчетнаяЗапись) Тогда
ВызватьИсключение НСтр("ru = 'Учетная запись не заполнена или заполнена неправильно.'");
КонецЕсли;
Если ПараметрыОтправки = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Не заданы параметры отправки.'");
КонецЕсли;
ТипЗнчКому = ?(ПараметрыОтправки.Свойство("Кому"), ТипЗнч(ПараметрыОтправки.Кому), Неопределено);
ТипЗнчКопии = ?(ПараметрыОтправки.Свойство("Копии"), ТипЗнч(ПараметрыОтправки.Копии), Неопределено);
СкрытыеКопии = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыОтправки, "СкрытыеКопии");
Если ТипЗнчКому = Неопределено И ТипЗнчКопии = Неопределено И СкрытыеКопии = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Не указано ни одного получателя.'");
КонецЕсли;
Если ТипЗнчКому = Тип("Строка") Тогда
ПараметрыОтправки.Кому = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыОтправки.Кому);
ИначеЕсли ТипЗнчКому <> Тип("Массив") Тогда
ПараметрыОтправки.Вставить("Кому", Новый Массив);
КонецЕсли;
Если ТипЗнчКопии = Тип("Строка") Тогда
ПараметрыОтправки.Копии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыОтправки.Копии);
ИначеЕсли ТипЗнчКопии <> Тип("Массив") Тогда
ПараметрыОтправки.Вставить("Копии", Новый Массив);
КонецЕсли;
Если ТипЗнч(СкрытыеКопии) = Тип("Строка") Тогда
ПараметрыОтправки.СкрытыеКопии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(СкрытыеКопии);
ИначеЕсли ТипЗнч(СкрытыеКопии) <> Тип("Массив") Тогда
ПараметрыОтправки.Вставить("СкрытыеКопии", Новый Массив);
КонецЕсли;
Если ПараметрыОтправки.Свойство("АдресОтвета") И ТипЗнч(ПараметрыОтправки.АдресОтвета) = Тип("Строка") Тогда
ПараметрыОтправки.АдресОтвета = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыОтправки.АдресОтвета);
КонецЕсли;
РаботаСПочтовымиСообщениямиСлужебный.ОтправитьСообщение(УчетнаяЗапись, ПараметрыОтправки);
РаботаСПочтовымиСообщениямиПереопределяемый.ПослеОтправкиПисьма(ПараметрыОтправки);
Если ПараметрыОтправки.ОшибочныеПолучатели.Количество() > 0 Тогда
ТекстОшибки = НСтр("ru = 'Следующие почтовые адреса не были приняты почтовым сервером:'");
Для Каждого ОшибочныйПолучатель Из ПараметрыОтправки.ОшибочныеПолучатели Цикл
ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1: %2",
ОшибочныйПолучатель.Ключ, ОшибочныйПолучатель.Значение);
КонецЦикла;
ВызватьИсключение ТекстОшибки;
КонецЕсли;
Возврат ПараметрыОтправки.ИдентификаторСообщения;
КонецФункции
// Функция может вызвать исключение, которое требуется обработать.
//
// Параметры:
// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - ссылка на
// учетную запись электронной почты.
// ПараметрыОтправки - Структура - содержит всю необходимую информацию о письме:
//
// * Кому - Массив
// - Строка - интернет адреса получателей письма.
// - Массив - коллекция структур адресов:
// * Адрес - Строка - почтовый адрес (должно быть обязательно заполнено).
// * Представление - Строка - имя адресата.
// - Строка - интернет-адреса получателей письма, разделитель - ";".
//
// * ПолучателиСообщения - Массив - массив структур, описывающий получателей:
// ** Адрес - Строка - почтовый адрес получателя сообщения.
// ** Представление - Строка - представление адресата.
//
// * Копии - Массив
// - Строка - адреса получателей копий письма. См. описание поля Кому.
//
// * СкрытыеКопии - Массив
// - Строка - адреса получателей скрытых копий письма. См. описание поля Кому.
//
// * Тема - Строка - (обязательный) тема почтового сообщения.
// * Тело - Строка - (обязательный) текст почтового сообщения (простой текст в кодировке win-1251).
// * Важность - ВажностьИнтернетПочтовогоСообщения
//
// * Вложения - Массив - файлы, которые необходимо приложить к письму (описания в виде структур):
// ** Представление - Строка - имя файла вложения;
// ** АдресВоВременномХранилище - Строка - адрес двоичных данных вложения во временном хранилище.
// ** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма).
// ** Идентификатор - Строка - (необязательный) используется для отметки картинок, отображаемых в теле письма.
//
// * АдресОтвета - Соответствие
// - Строка - см. описание поля Кому.
// * ИдентификаторыОснований - Строка - идентификаторы оснований данного письма.
// * ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке.
// * УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке.
// * УведомитьОПрочтении - Булево - необходимость запроса уведомления о прочтении.
// * ТипТекста - Строка
// - ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем
// - ТипТекстаПочтовогоСообщения - определяет тип
// переданного теста допустимые значения:
// HTML/ТипыТекстовЭлектронныхПисем.HTML - текст почтового сообщения в формате HTML.
// ПростойТекст/ТипыТекстовЭлектронныхПисем.ПростойТекст - простой текст почтового сообщения.
// Отображается "как есть" (значение по
// умолчанию).
// РазмеченныйТекст/ТипыТекстовЭлектронныхПисем.РазмеченныйТекст - текст почтового сообщения в формате
// Rich Text.
// * Соединение - ИнтернетПочта - существующее соединение с почтовым сервером. Если не указано, то создается новое.
// * ПротоколПочты - Строка - если указано значение "IMAP", то письмо будет передано по протоколу IMAP, если по
// указано значение "Все", то по протоколу SMTP и по протоколу IMAP, если ничего не указано
// то по протоколу SMTP. Параметр имеет смысл, только наличии действующего соединения,
// указанного в параметр Соединение. В противном случае протокол будет определен
// автоматически при установке соединения.
// * ИдентификаторСообщения - Строка - (возвращаемый параметр) идентификатор отправленного почтового сообщения на SMTP-сервере;
// * ИдентификаторСообщенияОтправкаIMAP - Строка - (возвращаемый параметр) идентификатор отправленного почтового
// сообщения на IMAP сервере;
// * ОшибочныеПолучатели - Соответствие - (возвращаемый параметр) список адресов, по которым отправка не выполнена.
// См. возвращаемое значение метода ИнтернетПочта.Послать() в синтакс-помощнике.
//
// УдалитьСоединение - ИнтернетПочта - параметр устарел, см. параметр ПараметрыОтправки.Соединение.
// УдалитьПротоколПочты - Строка - параметр устарел, см. параметр ПараметрыОтправки.ПротоколПочты.
//
// Возвращаемое значение:
// Строка - идентификатор отправленного сообщения.
//
Функция ОтправитьПочтовоеСообщение(Знач УчетнаяЗапись, Знач ПараметрыОтправки,
Знач УдалитьСоединение = Неопределено, УдалитьПротоколПочты = "") Экспорт
Если УдалитьСоединение <> Неопределено Тогда
ПараметрыОтправки.Вставить("Соединение", УдалитьСоединение);
КонецЕсли;
Если Не ПустаяСтрока(УдалитьПротоколПочты) Тогда
ПараметрыОтправки.Вставить("ПротоколПочты", УдалитьПротоколПочты);
КонецЕсли;
Если ТипЗнч(УчетнаяЗапись) <> Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты")
Или НЕ ЗначениеЗаполнено(УчетнаяЗапись) Тогда
ВызватьИсключение НСтр("ru = 'Учетная запись не заполнена или заполнена неправильно.'");
КонецЕсли;
Если ПараметрыОтправки = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Не заданы параметры отправки.'");
КонецЕсли;
ТипЗнчКому = ?(ПараметрыОтправки.Свойство("Кому"), ТипЗнч(ПараметрыОтправки.Кому), Неопределено);
ТипЗнчКопии = ?(ПараметрыОтправки.Свойство("Копии"), ТипЗнч(ПараметрыОтправки.Копии), Неопределено);
СкрытыеКопии = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыОтправки, "СкрытыеКопии");
Если ТипЗнчКому = Неопределено И ТипЗнчКопии = Неопределено И СкрытыеКопии = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Не указано ни одного получателя.'");
КонецЕсли;
Если ТипЗнчКому = Тип("Строка") Тогда
ПараметрыОтправки.Кому = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыОтправки.Кому);
ИначеЕсли ТипЗнчКому <> Тип("Массив") Тогда
ПараметрыОтправки.Вставить("Кому", Новый Массив);
КонецЕсли;
Если ТипЗнчКопии = Тип("Строка") Тогда
ПараметрыОтправки.Копии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыОтправки.Копии);
ИначеЕсли ТипЗнчКопии <> Тип("Массив") Тогда
ПараметрыОтправки.Вставить("Копии", Новый Массив);
КонецЕсли;
Если ТипЗнч(СкрытыеКопии) = Тип("Строка") Тогда
ПараметрыОтправки.СкрытыеКопии = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(СкрытыеКопии);
ИначеЕсли ТипЗнч(СкрытыеКопии) <> Тип("Массив") Тогда
ПараметрыОтправки.Вставить("СкрытыеКопии", Новый Массив);
КонецЕсли;
Если ПараметрыОтправки.Свойство("АдресОтвета") И ТипЗнч(ПараметрыОтправки.АдресОтвета) = Тип("Строка") Тогда
ПараметрыОтправки.АдресОтвета = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыОтправки.АдресОтвета);
КонецЕсли;
РаботаСПочтовымиСообщениямиСлужебный.ОтправитьСообщение(УчетнаяЗапись, ПараметрыОтправки);
РаботаСПочтовымиСообщениямиПереопределяемый.ПослеОтправкиПисьма(ПараметрыОтправки);
Если ПараметрыОтправки.ОшибочныеПолучатели.Количество() > 0 Тогда
ТекстОшибки = НСтр("ru = 'Следующие почтовые адреса не были приняты почтовым сервером:'");
Для Каждого ОшибочныйПолучатель Из ПараметрыОтправки.ОшибочныеПолучатели Цикл
ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1: %2",
ОшибочныйПолучатель.Ключ, ОшибочныйПолучатель.Значение);
КонецЦикла;
ВызватьИсключение ТекстОшибки;
КонецЕсли;
Возврат ПараметрыОтправки.ИдентификаторСообщения;
КонецФункции
// Автор библиотеки: ООО "1С-Софт". Все права защищены © 2021
// Типовая конфигурация Библиотека стандартных подсистем (далее - БСП)
// Код БСП распространяется по лицензии Attribution 4.0 International (CC BY 4.0):
// ссылка на лицензию: https://creativecommons.org/licenses/by/4.0/legalcode
// Код БСП распространяется по лицензии Attribution 4.0 International (CC BY 4.0):
// ссылка на лицензию: https://creativecommons.org/licenses/by/4.0/legalcode
Примера использования (с вложением)
Функция ОтправитьТабличныйДокументЭлектроннойПочтойКакPDF(УчетнаяЗаписьПочтыОтправителя, ПочтаПолучателя,
ТекстПисьма, ТемаПисьма, АдресТабличногоДокументаВоВременномХранилище)
Отправлено = Ложь;
Если УчетнаяЗаписьПочтыОтправителя = Неопределено Или УчетнаяЗаписьПочтыОтправителя.Пустая() Тогда
Возврат Отправлено;
КонецЕсли;
ТабДок = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилище);
ПотокФайла = Новый ПотокВПамяти();
ТабДок.Записать(ПотокФайла, ТипФайлаТабличногоДокумента.PDF);
ДвоичныеДанныеФайла = ПотокФайла.ЗакрытьИПолучитьДвоичныеДанные();
ВременноеХранилищеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла, Новый УникальныйИдентификатор);
Вложения = Новый Массив;
ОписаниеВложения = Новый Структура("Представление, АдресВоВременномХранилище", ТекстПисьма + ".pdf", ВременноеХранилищеФайла);
Вложения.Добавить(ОписаниеВложения);
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Кому", ПочтаПолучателя);
ПараметрыПисьма.Вставить("Тема", ТемаПисьма);
ПараметрыПисьма.Вставить("Тело", ТекстПисьма);
ПараметрыПисьма.Вставить("ТипТекста", "ПростойТекст");
ПараметрыПисьма.Вставить("Вложения", Вложения);
Попытка
Идентификатор = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗаписьПочтыОтправителя, ПараметрыПисьма);
Если ЗначениеЗаполнено(Идентификатор) Тогда
Отправлено = Истина;
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Отправка письма " + ПочтаПолучателя, УровеньЖурналаРегистрации.Ошибка,,,ОписаниеОшибки());
КонецПопытки;
Возврат Отправлено;
КонецФункции
ТекстПисьма, ТемаПисьма, АдресТабличногоДокументаВоВременномХранилище)
Отправлено = Ложь;
Если УчетнаяЗаписьПочтыОтправителя = Неопределено Или УчетнаяЗаписьПочтыОтправителя.Пустая() Тогда
Возврат Отправлено;
КонецЕсли;
ТабДок = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилище);
ПотокФайла = Новый ПотокВПамяти();
ТабДок.Записать(ПотокФайла, ТипФайлаТабличногоДокумента.PDF);
ДвоичныеДанныеФайла = ПотокФайла.ЗакрытьИПолучитьДвоичныеДанные();
ВременноеХранилищеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла, Новый УникальныйИдентификатор);
Вложения = Новый Массив;
ОписаниеВложения = Новый Структура("Представление, АдресВоВременномХранилище", ТекстПисьма + ".pdf", ВременноеХранилищеФайла);
Вложения.Добавить(ОписаниеВложения);
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Кому", ПочтаПолучателя);
ПараметрыПисьма.Вставить("Тема", ТемаПисьма);
ПараметрыПисьма.Вставить("Тело", ТекстПисьма);
ПараметрыПисьма.Вставить("ТипТекста", "ПростойТекст");
ПараметрыПисьма.Вставить("Вложения", Вложения);
Попытка
Идентификатор = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗаписьПочтыОтправителя, ПараметрыПисьма);
Если ЗначениеЗаполнено(Идентификатор) Тогда
Отправлено = Истина;
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Отправка письма " + ПочтаПолучателя, УровеньЖурналаРегистрации.Ошибка,,,ОписаниеОшибки());
КонецПопытки;
Возврат Отправлено;
КонецФункции
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник