При работе с платформой 1С 7.7 многие разработчики сталкиваются с ошибкой «Не смогли подключиться к SMTP-серверу» при использовании внешней компоненты DialMail.dll. Это распространенная проблема, вызванная тем, что компонента является устаревшей и не поддерживает современные протоколы шифрования, требуемые большинством почтовых сервисов (таких как Mail.ru, Yandex или Gmail).
Прежде чем переходить к радикальным методам, разберемся, почему возникают сбои. В последние годы почтовые провайдеры ужесточили требования к безопасности:
TLS 1.2 и выше, которые старые компоненты типа DialMail не могут корректно обработать.25 массово блокируется провайдерами для борьбы со спамом.Для начала диагностики обязательно загляните в лог-файл DialMail. Часто там содержится более детальное описание ошибки, которое поможет понять, на каком этапе «отваливается» соединение.
Если DialMail перестал работать, наиболее эффективным и доступным решением в среде 1С 7.7 является использование системного объекта CDO.Message. Это стандартный механизм Windows, который работает стабильнее сторонних DLL.
Разберем пример реализации отправки письма через CDO:
// Создаем объект конфигурации
Конфигурация = СоздатьОбъект("CDO.Configuration");
ПоляКонфигурации = Конфигурация.Fields;
ПоляКонфигурации.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;
ПоляКонфигурации.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtp.yandex.ru";
ПоляКонфигурации.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = 465;
ПоляКонфигурации.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1;
ПоляКонфигурации.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "user@yandex.ru";
ПоляКонфигурации.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = "ваш_пароль_приложения";
ПоляКонфигурации.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = 1;
ПоляКонфигурации.Update();
// Создаем сообщение
Письмо = СоздатьОбъект("CDO.Message");
Письмо.Configuration = Конфигурация;
Письмо.From = "user@yandex.ru";
Письмо.To = "receiver@mail.ru";
Письмо.Subject = "Тема сообщения";
Письмо.TextBody = "Текст сообщения";
Письмо.Send();
Если вы решили использовать CDO или другие методы, обязательно выполните следующие шаги для успешного подключения:
SMTP и создайте «Пароль приложения», если сервис требует двухфакторную аутентификацию.SSL (порт 465) в конфигурации CDO параметр smtpusessl должен быть установлен в значение 1.telnet или ping до почтового сервера с сервера, где запущена 1С.Если использование CDO не дает нужного результата из-за ограничений старой ОС Windows, рассмотрим более современные подходы:
PowerShell или Python, который будет выполнять отправку почты. В 1С 7.7 такой скрипт запускается командой ЗапуститьПриложение(). Это позволяет использовать актуальные библиотеки для работы с современными протоколами шифрования.REST API через объект WinHttp.WinHttpRequest.5.1. Этот метод позволяет отправлять запросы напрямую на сервер почтового провайдера через HTTP-запросы, что является наиболее надежным способом в современных условиях.Рекомендуем начать с перехода на CDO, так как это требует минимальных изменений в существующем коде и не требует установки дополнительных библиотек. Если же архитектура безопасности вашей компании требует еще более надежных решений, стоит рассмотреть создание локального SMTP-шлюза (например, IIS SMTP), который примет почту от 1С по локальной сети и безопасно перешлет её далее в интернет.