Отправка электронных писем непосредственно из 1С 7.7 часто становится сложной задачей из-за устаревания методов работы с протоколами безопасности, которые используют современные почтовые серверы. Разберем, как реализовать отправку почты, используя два основных подхода: встроенный объект CDO.Message и внешнюю компоненту DialMail.
Объект 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).
Если вы привыкли использовать DialMail, важно учитывать версию компоненты и правильное написание свойств. Основная ошибка пользователей заключается в неправильном вызове атрибутов, что приводит к ошибкам «поле агрегатного объекта не обнаружено».
Рассмотрим пример кода для работы с DialMail:
Функция ОтправитьПисьмоЧерезDialMail(СтруктураПисьма)
ОтправкаПочты = СоздатьОбъект("AddIn.SMTP");
// Важно: правильно задать SSL
ОтправкаПочты.ИспользоватьSSL = СтруктураПисьма.SSL;
// Подготовка тела письма
текписьмо = ОтправкаПочты.СоздатьПисьмо(Логин, АдресКому, АдресКопии, ЗаголовокСообщения, , текст, ВыбФайл);
// Подключение к серверу
Если ОтправкаПочты.Подключиться(СтруктураПисьма.СерверSMTP, СтруктураПисьма.ПортSMTP, Логин, Пароль, 1) = 0 Тогда
Сообщить("Ошибка подключения к SMTP");
ОтправкаПочты.Отключиться();
Возврат 0;
КонецЕсли;
Возврат ОтправкаПочты.ОтправитьПисьмо(, 1, 0);
КонецФункции
При использовании DialMail помните:
ИспользоватьSSL вместо ошибочного ИспользоватьSLL).DialMail может работать некорректно из-за конфликтов библиотек OpenSSL. В таких случаях рекомендуется переходить на CDO или использовать внешние .NET-обертки.Для стабильной работы почты мы рекомендуем следующие шаги:
DialMail (через свойство ВестиЛогФайл), чтобы оперативно диагностировать причину ошибки при сбоях отправки.Применяя эти методы, вы сможете настроить надежную отправку корреспонденции из 1С 7.7 даже в современных условиях эксплуатации почтовых серверов.