Отправка электронных сообщений из 1С:Предприятие 8 с помощью компоненты CDO.Message

Logo_1c_8_RazradotkaВ данной статье я рассмотрю пример кода, который позволяет отправлять электронные сообщения из 1С:Предприятие 8 с помощью стандартной библиотеки CDO.Message. Данная библиотека по умолчанию входит во все версии ОС Windows начиная с Win2K. Этот метод отправки сообщений может пригодится когда на почтовом сервере используется защищенный протокол SSL и позволяет избежать необходимости установки дополнительного ПО, такого как stunnel и пр. Итак:

 

 

Раннее, я уже приводил пример кода отправки электронных сообщений из 1С. Но, как уже говорилось выше, данный метод будет необходим, если smtp-сервер использует протокол SSL (например, данный протокол сейчас обязателен для yandex.ru, mail.ru gmail.com)

Библиотека CDO.Message по умолчанию встроена в ОС семейства Windows начиная с Win2K, вместе с классом CDO.Configuration, который также необходим для отправки сообщений. Описание библиотек на сайте MSDN.

Весь приведенный ниже код может работать как на клиенте, так и на сервере. Главное чтобы были доступны COM-объекты «CDO.Message» и «CDO.Configuration».

Для отправки сообщений, необходимо вызвать функцию, содержащую следующий код:

// Отправить электронное сообщение с помощью CDO.Message
//
// Параметры:
//  СтруктураСообщения      - Структура - струкутура отправляемого сообщения:
//    * АдресЭлектроннойПочтыПолучателя     - Строка - Адрес электронной почты получателя сообщения. Может содержать несколько адресов, разделеных знаком ";".
//    * АдресЭлектроннойПочтыОтправителя    - Строка - Адрес электронной почты отправителя сообщения.
//    * ТемаСообщения                       - Строка - Тема сообщения.
//    * ТипТекстаПочтовогоСообщения         - Системное перечисление ТипТекстаПочтовогоСообщения - тип тела сообщения
//    * ТекстСообщения                      - Строка - Текст сообщения
//    * Вложения                            - Строка или СписокЗначений, состоящий из строк - Путь к вложениями сообщения
//  УчетнаяЗаписьЭП         - Структура - структура учетной записи электронной почты для отправки:
//    * АдресSMTP                           - Строка - Адрес SMTP-сервера
//    * ПортSMTP                            - Строка - Порт SMTP-сервера
//    * ПользовательSMTP                    - Строка - Имя пользвоателя SMTP-сервера
//    * ПарольSMTP                          - Строка - Пароль пользвоателя SMTP-сервера
//    * ИспользоватьSSL                     - Булево - Использовать протокол SSL
//
// Возвращаемое значение:
//  Булево                  - Результат отправки сообщения:
//   * Истина                               - Сообщение успешно отправлено.
//   * Ложь                                 - Ошибка отправки собщения
//
&НаКлиенте
Функция ОтправитьСообщениеCDOMessage(СтруктураСообщения, УчетнаяЗаписьЭП)
//Создание объектов
Попытка
loConfig = Новый COMОбъект("CDO.Configuration");
loCdoMessage = Новый COMОбъект("CDO.Message");
Исключение
Сообщить(ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
//Адрес получателя
loCdoMessage.To = СокрЛП(СтруктураСообщения.АдресЭлектроннойПочтыПолучателя);
//Адрес отправителя
loCdoMessage.From = СокрЛП(СтруктураСообщения.АдресЭлектроннойПочтыОтправителя);
//Тема сообщения
loCdoMessage.Subject = СокрЛП(СтруктураСообщения.ТемаСообщения);
//Текст сообщения в зависимости от формата
#Если ВебКлиент Тогда
loCdoMessage.Textbody = СокрЛП(СтруктураСообщения.ТекстСообщения);
#Иначе
Если СтруктураСообщения.ТипТекстаПочтовогоСообщения = ТипТекстаПочтовогоСообщения.HTML Тогда
loCdoMessage.HTMLBody = СокрЛП(СтруктураСообщения.ТекстСообщения);
Иначе
loCdoMessage.Textbody = СокрЛП(СтруктураСообщения.ТекстСообщения);
КонецЕсли;
  #КонецЕсли
  //Вложения
СписокВложений = СтруктураСообщения.Вложения;
Если ТипЗнч(СписокВложений) = Тип("Строка") И Не СписокВложений = "" Тогда
Попытка
loCdoMessage.AddAttachment(СписокВложений);
Исключение
КонецПопытки;
ИначеЕсли ТипЗнч(СписокВложений) = Тип("СписокЗначений") Тогда
Для Каждого ПутьКВложению Из СписокВложений Цикл
Попытка
loCdoMessage.AddAttachment(ПутьКВложению.Значение);
Исключение
КонецПопытки;
КонецЦикла;
КонецЕсли;
//Параметры сообщения
loCdoMessage.Configuration = loConfig;
//Адрес SMTP-Сервера
loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = УчетнаяЗаписьЭП.АдресSMTP;
//Порт SMTP-сервера
loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = УчетнаяЗаписьЭП.ПортSMTP;
//Имя пользвоателя SMTP-сервера
loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = УчетнаяЗаписьЭП.ПользовательSMTP;
//Пароль пользвоателя SMTP-сервера
loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = УчетнаяЗаписьЭП.ПарольSMTP;
//Способ передачи сообщения:
//  1 - Отправить сообщение с помощью локального каталога SMTP-службы
//  2 - Отправить сообщение через сеть (по протоколу SMTP по сети).
loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;
//Проверка подлинности:
//  0 - Без аутентифиации
//  1 - Использовать базовую (открытым текстом) проверку подлинности.
//  2 - Использовать проверку подлинности ntlm
loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1;
//Использование протокола SSL
//  0 - Не использовать
//  1 - Использовать
loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = ?(УчетнаяЗаписьЭП.ИспользоватьSSL,1,0);
//Число секунд ожидания для службы SMTP
loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout").Value = 60;
//Обновляем настройки
loConfig.Fields.Update();
//Отправка сообщения
Попытка
loCdoMessage.Send();
Возврат Истина;
Исключение
Сообщить(ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
КонецФункции

Пример вызова функции может быть следующим:

&НаКлиенте
Процедура Отправить(Команда)
//Структура сообщения
СтруктураСообщения = Новый Структура;
СтруктураСообщения.Вставить("АдресЭлектроннойПочтыПолучателя","example@mail.ru");
СтруктураСообщения.Вставить("АдресЭлектроннойПочтыОтправителя","example@yandex.ru");
СтруктураСообщения.Вставить("ТемаСообщения","Проверка сообщения");
#Если ВебКлиент Тогда
СтруктураСообщения.Вставить("ТипТекстаПочтовогоСообщения",Неопределено);
#Иначе
СтруктураСообщения.Вставить("ТипТекстаПочтовогоСообщения",ТипТекстаПочтовогоСообщения.HTML);
#КонецЕсли
ТекстСообщения =
"˂html˃
|˂head˃
|˂meta content=""text/html; charset=Windows-1251"" http-equiv=""content-type""˃
|˂title˃ Проверка сообщения ˂/title˃
|˂/head˃
|˂body˃
|˂p˃˂/p˃
|˂h1> Заголовок сообщения ˂/h1˃
|˂p˃˂/p˃
|˂p˃ Это текст тестового сообщения!˂/p˃
|˂p˃˂/p˃
|˂/body˃
|˂/html˃";
СтруктураСообщения.Вставить("ТекстСообщения",ТекстСообщения);
СтруктураСообщения.Вставить("Вложения","E:\example\Счет_на_оплату.pdf");
//Учетная запись электронной почты
УчетнаяЗаписьЭП = Новый Структура;
УчетнаяЗаписьЭП.Вставить("АдресSMTP","smtp.yandex.ru");
УчетнаяЗаписьЭП.Вставить("ПортSMTP","465");
УчетнаяЗаписьЭП.Вставить("ПользовательSMTP","example@yandex.ru");
УчетнаяЗаписьЭП.Вставить("ПарольSMTP","Pass123");
УчетнаяЗаписьЭП.Вставить("ИспользоватьSSL",Истина);
//Отпрпавка сообщения
Если ОтправитьСообщениеCDOMessage(СтруктураСообщения, УчетнаяЗаписьЭП) Тогда
Сообщить("Сообщение успешно отправлено!");
КонецЕсли;
КонецПроцедуры

Пример использования данной процедуры можно посмотреть вот в этой простой обработке (на управляемых формах):

Скачать обработку

otpravka-email-d-cdo-message-iz-1c-001

Помогла ли вам данная статья?
Да, спасибо, все получилось.
Немного помогла.
Совсем не помогла.
Не то, что я искал(а).
Смотреть результаты
Запись опубликована в рубрике Разработка в 1С с метками . Добавьте в закладки постоянную ссылку.




Добавить комментарий

Ваш e-mail не будет опубликован.