При автоматизации задач в 1С 7.7 часто возникает необходимость отправлять электронные письма с вложенными файлами (например, прайс-листами, счетами или печатными формами). Главная сложность при работе из 7.7 заключается в том, что современные почтовые сервисы (Yandex, Mail.ru, Gmail и др.) требуют обязательной защиты соединения по протоколам SSL/TLS и использования специальных паролей приложений.
Рассмотрим основные способы решения этой задачи с помощью внешних компонент, системных COM-объектов Windows и сторонних утилит.
Внешняя компонента DialMail.dll — одно из самых популярных решений для работы с электронной почтой в 1С 7.7. Она позволяет формировать письма, подключаться по SMTP/POP3, использовать авторизацию и работать с вложениями.
Разберем пример кода отправки письма с файлом вложения через DialMail.dll:
Путь = КаталогИБ() + "DialMail.dll";
Если ЗагрузитьВнешнююКомпоненту(Путь) = 0 Тогда
Сообщить("Неудачная попытка загрузить DialMail.dll");
КонецЕсли;
ОтправкаПочты = СоздатьОбъект("AddIn.SMTP");
ОтправкаПочты.РабочийКаталог = СокрЛП(КаталогИБ());
ОтправкаПочты.УстановитьКодировкуИСпособКодирования(14, 1);
ОтправкаПочты.MakeContentDescriptionTag = 0;
ОтправкаПочты.ПочтоваяПрограмма = "1C 7.7 Mail Bot";
// Установка параметров шифрования SSL
ОтправкаПочты.ИспользоватьSSL = 1;
// Путь к файлу-вложению (имя файла должно быть заключено в кавычки)
ВыбФайл = СокрЛП(КаталогИБ()) + "Temp\Report.xls";
ВыбФайл = """" + ВыбФайл + """";
// Формируем письмо: ОтКого, Кому, Копии, Тема, Текст, Вложения
ОтправкаПочты.СоздатьПисьмо("sender@yandex.ru", "receiver@domain.ru", "", "Отчет 1С", , "Автоматическая выгрузка во вложении.", СокрЛП(ВыбФайл));
// Подключаемся к SMTP-серверу: Хост, Порт, Логин, Пароль
Если ОтправкаПочты.Подключиться("smtp.yandex.ru", 465, "sender@yandex.ru", "пароль_приложения") = 0 Тогда
Сообщить("Не смогли подключиться к SMTP-серверу");
Сообщить("Ошибка: " + ОтправкаПочты.ПоследняяОшибкаСтр);
Сообщить("Ответ сервера: " + ОтправкаПочты.ПоследнийОтветСервера);
Иначе
// Отправка писем
Если ОтправкаПочты.ОтправитьВсеПисьма(0, 1, 0) = -100 Тогда
Сообщить("Успешно отправлено");
Иначе
// Пробуем отправить по одному письму
ОтправкаПочты.ОтправитьПисьмо(1, 1);
КонецЕсли;
ОтправкаПочты.Отключиться();
КонецЕсли;
Проанализируем важные детали отладки при использовании DialMail.dll:
ПоследняяОшибкаСтр и ПоследнийОтветСервера.dialmail_smtpYYYY_MM.log, чтобы увидеть подробную картину взаимодействия с сервером.ОтправитьВсеПисьма() можно использовать поштучную отправку ОтправитьПисьмо().Компонента CDO (Collaboration Data Objects) встроена в операционную систему Windows и не требует регистрации сторонних DLL-файлов. Этот способ считаются наиболее надежным, так как CDO работает через системный стек Windows.
Рассмотрим пошаговую настройку отправки через CDO.Message:
Почта = СоздатьОбъект("CDO.Message");
Конфигурация = СоздатьОбъект("CDO.Configuration");
// Настройка параметров подключения по SMTP
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2; // Отправка через сетевой SMTP
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtp.yandex.ru";
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = 465; // SSL порт
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1; // Basic auth
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "sender@yandex.ru";
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = "пароль_приложения";
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = 1; // Использовать SSL
Конфигурация.Fields.Update();
Почта.Configuration = Конфигурация;
Почта.From = "sender@yandex.ru";
Почта.To = "receiver@domain.ru";
Почта.Subject = "Файл из 1С 7.7";
Почта.TextBody = "Во вложении находится запрашиваемый файл.";
// Добавление вложения
Почта.AddAttachment(КаталогИБ() + "Temp\Report.xls");
Попытка
Почта.Send();
Сообщить("Письмо успешно отправлено через CDO!");
Исключение
Сообщить("Ошибка при отправке письма: " + ОписаниеОшибки());
КонецПопытки;
В стандартную поставку 1С 7.7 входит внешняя компонента V7PLUS.DLL, в которой присутствует объект AddIn.V7Mail. Она подходит для отправки писем внутри локальной сети или через внутренние почтовые серверы без строгих требований к протоколам шифрования.
Однако стоит учитывать ограничение: библиотека V7PLUS.DLL давно не обновлялась и не поддерживает современные протоколы безопасности TLS 1.2 / TLS 1.3. При попытке отправки через публичные сервисы (Yandex, Mail.ru) напрямую подключиться не удастся.
Если почтовый провайдер полностью отключил старые протоколы SSL 2.0/3.0 и TLS 1.0, а старые DLL-компоненты выдают ошибки подключения, разберем альтернативные подходы:
stunnel. В 1С 7.7 вы отправляете письмо без SSL на 127.0.0.1 (локальный порт), а stunnel оборачивает трафик в TLS 1.2/1.3 и пересылает внешнему почтовому серверу.WScript.Shell запускается утилита curl.exe, которая поддерживает современные стандарты шифрования и может передавать письма с вложениями по SMTP/SMTPS.WinHttp.WinHttpRequest.5.1 или MSXML2.ServerXMLHTTP.