Отправка писем в HTML, используя функционал компоненты Collaboration Data Object (CDO)

16 3

В стандартном компоненте Directum для отправки почты SBUM, нет возможности подключаться к серверам с шифрованием TSL/SSL, а также отправлять письма в формате HTML с вложенными в текст письма картинками.

Для решения данной задачи можно использовать сторонний компонент работы с почтой, который содержится в поставке MS Office под названием Microsoft Collaboration Data Object.

Пример для отправки почты с использованием TSL/SSL и вложением картинок в текст письма, на примере подключения к gmail.com:

  // Создать объект CDO
  try
    CDO_Obj = CreateObject("CDO.Message")
  except
    Exit("Невозможно создать объект CDO")
  endexcept
  
  // Указать параметры письма
     CDO_Obj.BodyPart.Charset = "utf-8" // Кодировка письма
  CDO_Obj.To = "Адрес получателя"
  CDO_Obj.CC = "" 
  CDO_Obj.BCC = ""
        
  CDO_Obj.Sender = "Отправитель"
  CDO_Obj.From = "Адрес отправителя = login@gmail.com"    // Здесь также можно указать строку в формате "SenderName" <адрес EMail>
  CDO_Obj.Subject = "Тема"
  
  CDO_Obj.HTMLBody = "Тело письмо в формате HTML"
  // в параметре HTMLBody должны быть строка вида <img src = “cid:1.png” >
// без каких-либо путей (относительных или абсолютных)


  fldr = "d:\"
  filename = "1.png"
  filepath = "d:\Документ.doc"
  // Здесь указывается путь к картинке(ам), которая будет вложена в текст письма
  cdoRefTypeId = 0
  CDO_Obj.AddRelatedBodyPart(fldr & filename; filename ; cdoRefTypeId)
  // Вложения в письмо
  CDO_Obj.AddAttachment(filepath)    

  // Указать параметры подключения к серверу
  CDO_Obj.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2     // тип подключения: 1 - через профиль, 2 - через SMTP
  CDO_Obj.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"  // SMTP сервер
  CDO_Obj.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1           // SMTP - аунтентификация (0/1)
  CDO_Obj.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "login"         // имя пользователя
  CDO_Obj.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"      // Пароль пользователя
  CDO_Obj.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465           // Порт подключения (25/465/587)
  CDO_Obj.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true              // Использование шифрования
  CDO_Obj.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60     // Таймаут
  CDO_Obj.Configuration.Fields.Update  // Обязательная строка после обновления параметров
  try
    CDO_Obj.Send      // Непосредственно отправка
    SendResult = "Отправилось без ошибок"
  except
    // Ловим ошибки и обрабатываем их
      SendException = GetLastException()
      SendResult = SendException.Message
endexcept
 Окно(SendResult)

В результате в мой Outlook получил письмо следующего вида (в данном случае картинка - это штрих код):

Алексей Якимов
Оффтоп: Кодировку можно указать таким образом, и тут же можно указать ContentType содержимого письма, в данном случае явно указывается, что это будет HTML.
CDO_Obj.Fields.Item("urn:schemas:mailheader:content-type") = "text/html; charset=""windows-1251""" 
CDO_Obj.Fields.Update()
Реша Решетников

Я так понимаю к таком серверу:
Имя сервера: smtp.office365.com
Порт: 587
Метод шифрования: TLS
я стандартным методом подключиться не смогу?

Роман Злобин

Да, все верно. Если у вас версия Directum ниже 5.2. С версии Directum 5.2 изменили работу SBUM - там должно работать.

Авторизуйтесь, чтобы написать комментарий