При работе в устаревших конфигурациях, таких как 1С:Бухгалтерия 2.0 на платформе 1С:Предприятие 8.2, разработчики часто сталкиваются с невозможностью отправить электронное письмо через современные сервисы (Yandex, Mail.ru, Gmail). Основная причина заключается в том, что объект ИнтернетПочтовыйПрофиль в версии 8.2 не имеет встроенного свойства для включения SSL-шифрования, которое стало обязательным для большинства почтовых провайдеров.
В этой статье мы подробно разберем, почему возникает ошибка тайм-аута, и проанализируем несколько способов решения проблемы: от настройки системных компонентов до использования стороннего программного обеспечения.
Рассмотрим стандартный код, который часто используют разработчики:
Профиль = Новый ИнтернетПочтовыйПрофиль;
профиль.ПортSMTP = 465;
профиль.АдресСервераSMTP = "smtp.yandex.ru";
профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
Почта = Новый ИнтернетПочта;
Почта.Подключиться(Профиль);
Выясним причину сбоя: при выполнении метода Подключиться() система пытается установить соединение по порту 465, который ожидает зашифрованный трафик (SSL). Платформа 8.2 отправляет данные в открытом виде, сервер не получает ожидаемого рукопожатия (handshake) и обрывает соединение по тайм-ауту. Свойство ИспользоватьSSLSMTP появилось только в платформе версии 8.3.1, поэтому в 8.2 напрямую этот механизм не работает.
Самый правильный и надежный способ — это запуск существующей информационной базы на платформе 8.3 в режиме совместимости. Проанализируем ситуацию: даже если конфигурация остается старой («Бухгалтерия 2.0»), использование актуального движка платформы позволяет задействовать новые свойства объектов.
Разберем по шагам, что нужно изменить в коде после обновления платформы:
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Ложь;
Как отмечают участники обсуждения, это решает проблему мгновенно, так как 1С 8.3 умеет корректно работать с защищенными портами.
Если организация категорически не готова переходить на платформу 8.3, мы можем воспользоваться системным компонентом Windows — CDO (Collaboration Data Objects). Этот объект позволяет отправлять почту, используя встроенные возможности операционной системы, игнорируя ограничения платформы 1С.
Посмотрим на пример реализации такой функции:
Конфигурация = Новый COMОбъект("CDO.Configuration");
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = "smtp.yandex.ru";
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = 465;
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = Истина;
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1;
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = "ваш_логин";
Конфигурация.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = "пароль_приложения";
Конфигурация.Fields.Update();
Письмо = Новый COMОбъект("CDO.Message");
Письмо.Configuration = Конфигурация;
Письмо.From = "ваш_адрес@yandex.ru";
Письмо.To = "кому@mail.ru";
Письмо.Subject = "Тема письма";
Письмо.TextBody = "Текст сообщения";
Письмо.Send();
Важный нюанс: для современных почтовых сервисов (Яндекс, Mail.ru) в поле sendpassword необходимо указывать не основной пароль от почты, а специальный пароль приложения, сгенерированный в настройках безопасности вашего почтового ящика.
Рассмотрим вариант для системных администраторов — использование утилиты stunnel. Этот метод позволяет «обмануть» 1С, заставив её думать, что она отправляет почту без шифрования.
Разберем принцип работы по шагам:
smtp.yandex.ru:465.В самой 1С код будет выглядеть так, будто шифрование не используется:
Профиль.АдресСервераSMTP = "127.0.0.1"; // Локальный адрес
Профиль.ПортSMTP = 25; // Порт, который слушает stunnel
Это надежное решение, которое часто применялось до массового перехода на 1С 8.3.
Независимо от выбранного способа, необходимо правильно подготовить сам почтовый ящик. Проанализируем обязательные требования сервисов:
Подведем итог: использование стандартного объекта ИнтернетПочта в 1С 8.2 для работы с SSL невозможно. Оптимальным решением является использование платформы 8.3. Если же это невозможно, следует использовать системный объект CDO.Message или сторонние средства проксирования трафика.