Как настроить отправку электронной почты в 1С 7.7 с поддержкой SSL?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Отправка электронных писем непосредственно из 1С 7.7 часто становится сложной задачей из-за устаревания методов работы с протоколами безопасности, которые используют современные почтовые серверы. Разберем, как реализовать отправку почты, используя два основных подхода: встроенный объект CDO.Message и внешнюю компоненту DialMail.

Решение 1: Использование объекта CDO.Message

Объект CDO.Message является стандартным решением для операционных систем Windows, позволяющим работать с протоколом SMTP через COM-интерфейс. Это более надежный и современный способ по сравнению со сторонними библиотеками.

Рассмотрим структуру функции для отправки письма через CDO:


Функция ОтправитьПисьмоЧерезCDO(СтруктураCDO) 
    Письмо = СоздатьОбъект("CDO.Message");
    Письмо.to = СтруктураCDO.Кому;
    Письмо.from = СтруктураCDO.Отправитель;
    Письмо.cc = СтруктураCDO.Копия;
    Письмо.bcc = СтруктураCDO.СкрытаяКопия;
    
    // Добавление вложений
    _сзВложения = СтруктураCDO.Вложения;
    Для иии = 1 по _сзВложения.РазмерСписка() Цикл
        Письмо.AddAttachment(_сзВложения.ПолучитьЗначение(иии));
    КонецЦикла;
    
    Письмо.Subject = СтруктураCDO.Тема;
    Письмо.TextBody = СтруктураCDO.Текст;
    
    // Настройка параметров подключения
    Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;
    Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = СтруктураCDO.СерверSMTP;
    Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = СтруктураCDO.Аутентификация; 
    Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = СтруктураCDO.ПользовательSMTP;
    Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = СтруктураCDO.ПарольSMTP;
    Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = СтруктураCDO.ПортSMTP;
    Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = СтруктураCDO.SSL;
    Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout").Value = СтруктураCDO.ТаймАут;
    Письмо.Configuration.Fields.Update();
    
    Попытка
        Письмо.Send();
    Исключение
        Возврат ОписаниеОшибки();
    КонецПопытки;
КонецФункции

Важные замечания: При настройке CDO убедитесь, что параметр smtpusessl установлен в 1 (истина), а порт сервера соответствует требованиям почтового провайдера для защищенного соединения (обычно 465 или 587).

Решение 2: Использование внешней компоненты DialMail

Если вы привыкли использовать DialMail, важно учитывать версию компоненты и правильное написание свойств. Основная ошибка пользователей заключается в неправильном вызове атрибутов, что приводит к ошибкам «поле агрегатного объекта не обнаружено».

Рассмотрим пример кода для работы с DialMail:


Функция ОтправитьПисьмоЧерезDialMail(СтруктураПисьма) 
    ОтправкаПочты = СоздатьОбъект("AddIn.SMTP");
    
    // Важно: правильно задать SSL
    ОтправкаПочты.ИспользоватьSSL = СтруктураПисьма.SSL;
    
    // Подготовка тела письма
    текписьмо = ОтправкаПочты.СоздатьПисьмо(Логин, АдресКому, АдресКопии, ЗаголовокСообщения, , текст, ВыбФайл);
    
    // Подключение к серверу
    Если ОтправкаПочты.Подключиться(СтруктураПисьма.СерверSMTP, СтруктураПисьма.ПортSMTP, Логин, Пароль, 1) = 0 Тогда
        Сообщить("Ошибка подключения к SMTP");
        ОтправкаПочты.Отключиться();
        Возврат 0;
    КонецЕсли;
    
    Возврат ОтправкаПочты.ОтправитьПисьмо(, 1, 0);
КонецФункции

При использовании DialMail помните:

  1. Всегда проверяйте правильность написания имен свойств (например, ИспользоватьSSL вместо ошибочного ИспользоватьSLL).
  2. Для современных почтовых сервисов (Mail.ru, Яндекс, Gmail) в настройках безопасности аккаунта настоятельно рекомендуется создавать пароль для внешнего приложения. Это позволяет обойти ограничения, связанные с двухфакторной аутентификацией.
  3. Если возникают проблемы на 64-битных ОС (например, Windows 10 или Windows Server 2012+), DialMail может работать некорректно из-за конфликтов библиотек OpenSSL. В таких случаях рекомендуется переходить на CDO или использовать внешние .NET-обертки.

Советы по безопасности и настройке

Для стабильной работы почты мы рекомендуем следующие шаги:

Применяя эти методы, вы сможете настроить надежную отправку корреспонденции из 1С 7.7 даже в современных условиях эксплуатации почтовых серверов.

← На главную