При использовании штатной компоненты V7Plus.dll для отправки почты через объект AddIn.V7Mail разработчики в 1С 7.7 часто сталкиваются с ошибками вида «Ошибка при выполнении метода объекта компоненты» или сообщением ОС «с запрошенным действием не связана программа электронной почты». Это связано с тем, что штатный механизм работает через устаревший интерфейс Simple MAPI и требуемый 32-разрядный почтовый клиент, а также не поддерживает современные протоколы шифрования SSL/TLS.
Рассмотрим подробно универсальные и надёжные способы реализации работы с почтой в платформе 1С 7.7 без зависимости от сторонних установленных почтовых программ.
Наиболее популярный и эффективный вариант — использование системного 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:
smtpusessl установлен в значение 1, а порт указан корректно (обычно 465).From отличается от логина, переданного в поле sendusername. Современные почтовые сервисы (Yandex, Mail.ru и др.) требуют полного совпадения адреса отправителя и авторизованной учетной записи.Обратите внимание: Компонент CDO.Message использует защищенное соединение SMTPS (порт 465), но не поддерживает протокол STARTTLS (порт 587). В современных системах Windows 7/10/11 для успешной работы CDO с протоколами TLS 1.2 должна быть включена системная поддержка TLS 1.2 в реестре Windows (в ветке Schannel).
Поскольку 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:
curl.exe встроена по умолчанию. Из 1С 7.7 с помощью команды ЗапуститьПриложение можно передавать письмо напрямую серверу по протоколам SMTPS/STARTTLS с полным соответствием современным стандартам безопасности.WinHttp.WinHttpRequest.5.1 с использованием REST API почтовых сервисов.