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

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

При использовании штатной компоненты V7Plus.dll для отправки почты через объект AddIn.V7Mail разработчики в 1С 7.7 часто сталкиваются с ошибками вида «Ошибка при выполнении метода объекта компоненты» или сообщением ОС «с запрошенным действием не связана программа электронной почты». Это связано с тем, что штатный механизм работает через устаревший интерфейс Simple MAPI и требуемый 32-разрядный почтовый клиент, а также не поддерживает современные протоколы шифрования SSL/TLS.

Рассмотрим подробно универсальные и надёжные способы реализации работы с почтой в платформе 1С 7.7 без зависимости от сторонних установленных почтовых программ.

Способ 1. Отправка сообщений с помощью COM-объекта CDO.Message

Наиболее популярный и эффективный вариант — использование системного COM-объекта CDO.Message (Collaboration Data Objects), встроенного в операционные системы Windows. Данный метод позволяет отправлять письма прямо через SMTP-сервер с поддержкой SSL/TLS шифрования, аутентификации и вложенных файлов.

Разберем по шагам готовый пример универсальной процедуры для отправки электронного письма из 1С 7.7:


Процедура глОтправить(АдресПолучателя, Вложения = "", Тема = "", Текст = "")
    oMessage = СоздатьОбъект("CDO.Message");
    
    // Адресация и содержание
    oMessage.To = СокрЛП(АдресПолучателя);
    oMessage.From = СокрЛП(АдресОтправителя); // Должен совпадать с логином
    oMessage.Subject = Тема;
    oMessage.TextBody = Текст;
    oMessage.TextBodyPart.Charset = "windows-1251";
    
    // Добавление вложений
    Если ТипЗначения(Вложения) = 2 Тогда
        Если ПустоеЗначение(Вложения) = 0 Тогда
            oMessage.AddAttachment(Вложения);
        КонецЕсли;
    ИначеЕсли ТипЗначения(Вложения) = 100 Тогда
        Для Сч = 1 По Вложения.РазмерСписка() Цикл                          
            oMessage.AddAttachment(Вложения.ПолучитьЗначение(Сч));
        КонецЦикла;
    КонецЕсли;
    
    // Настройки SMTP-подключения
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").value = 2; // cdoSendUsingPort
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").value = СокрЛП(СерверОтправкиПочты);
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").value = 1; // Basic authentication
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").value = СокрЛП(Логин);
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").value = СокрЛП(Пароль);
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").value = 465; // SSL Порт
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").value = 1; // Использовать SSL
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout").value = 60;
    
    oMessage.Configuration.Fields.Update();
    
    Попытка
        oMessage.Send();
        Сообщить("Письмо успешно отправлено на " + СокрЛП(АдресПолучателя));
    Исключение
        Сообщить("Не удалось отправить сообщение!");
        Сообщить(ОписаниеОшибки(), "!");
    КонецПопытки;
КонецПроцедуры

Для отправки копии письма можно дополнительно заполнять свойства oMessage.CC (копия) или oMessage.BCC (скрытая копия).

Частые ошибки при работе с CDO.Message и способы их устранения

Проанализируем распространенные сбои при отправке писем через CDO.Message:

  1. Ошибка 550 SMTP is available only with SSL or TLS connection enabled — сервер требует защищенное соединение. Убедитесь, что параметр smtpusessl установлен в значение 1, а порт указан корректно (обычно 465).
  2. Ошибка 553 5.7.1 Sender address rejected: not owned by auth user — адрес в поле From отличается от логина, переданного в поле sendusername. Современные почтовые сервисы (Yandex, Mail.ru и др.) требуют полного совпадения адреса отправителя и авторизованной учетной записи.
  3. Код ошибки транспорта 0x80040217 — ошибка авторизации. Обратите внимание: большинство современных сервисов запрещают использование основного пароля от ящика. Для работы 1С необходимо сгенерировать специальный пароль для внешних приложений в настройках безопасности вашего почтового аккаунта.

Обратите внимание: Компонент CDO.Message использует защищенное соединение SMTPS (порт 465), но не поддерживает протокол STARTTLS (порт 587). В современных системах Windows 7/10/11 для успешной работы CDO с протоколами TLS 1.2 должна быть включена системная поддержка TLS 1.2 в реестре Windows (в ветке Schannel).

Способ 2. Получение и обработка почты через DialMail.dll

Поскольку CDO.Message предназначен исключительно для отправки писем, для приема писем по протоколу POP3/IMAP в 1С 7.7 традиционно применяют внешнюю компоненту DialMail.dll.

Рассмотрим пример кода получения входящих писем и сохранение вложений с помощью объектов AddIn.POP3:


Функция ПодключитьсяКPop3()
    Если ЗагрузитьВнешнююКомпоненту("DialMail.dll") = 0 Тогда
        Сообщить("Не удалось обнаружить компоненту DialMail.dll!");
        Возврат 0;
    КонецЕсли;
    
    POP3 = СоздатьОбъект("AddIn.POP3");
    POP3.РабочийКаталог = СокрЛП(КаталогВременныхФайлов());
    POP3.ИспользоватьSSL = 1;
    POP3.ИспользоватьTSL = 1;
    
    // Подключение к серверу POP3 (порт 995 для SSL)
    Если POP3.Подключиться(СерверПриемаПочты, "995", Логин, Пароль, 1, 1) = 0 Тогда
        Предупреждение("Не смогли подключиться к POP3-серверу");
        Возврат 0;
    КонецЕсли;
    
    Возврат 1;
КонецФункции

Процедура ЗагрузитьВходящуюПочту()
    Если ПодключитьсяКPop3() <> 1 Тогда
        Возврат;
    КонецЕсли;
    
    ВсегоПисем = POP3.КоличествоПисем;
    Для нс = 1 По ВсегоПисем Цикл
        Если POP3.ПолучитьПисьмо(нс, 0, 0) = 1 Тогда
            POP3.РаспаковатьПисьмо();
            
            // Сохранение присоединенных файлов
            Для нф = 1 По POP3.КоличествоПрисоединенныхФайлов Цикл
                ИмяФайла = POP3.ПолучитьИмяПрисоединенногоФайла(нф);
                POP3.СохранитьПрисоединенныйФайл(нф, КаталогНаДиске, ИмяФайла);
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    
    POP3.Отключиться();
КонецПроцедуры

Альтернативные способы обмена почтой

Если в процессе настройки возникли проблемы с шифрованием или устаревшими библиотеками SSL, рассмотрим другие варианты реализации отправки из 1С 7.7:

← На главную