Как настроить отправку электронной почты из 1С через SMTP с использованием SSL?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Отправка электронной почты — одна из самых востребованных функций в корпоративных системах. Счета, уведомления, отчеты — все это ежедневно отправляется из 1С. Однако при переходе почтовых сервисов (таких как Yandex, Mail.ru, Gmail) на обязательное использование шифрования SSL/TLS, многие разработчики сталкиваются с ошибками подключения.

Рассмотрим подробно, как правильно настроить ИнтернетПочтовыйПрофиль для работы с защищенными протоколами в рамках защищенной IT инфраструктуры, разберем основные ошибки (например, сбои при рукопожатии SSL или ошибки аутентификации) и проанализируем рабочий код, который поможет избежать этих проблем.

Основные причины проблем с отправкой почты

Прежде чем переходить к написанию кода, давайте выясним, почему старые методы перестали работать. Раньше для отправки почты использовался 25-й порт и простая аутентификация. Сейчас стандартом безопасности является использование портов 465 (SSL) или 587 (TLS), что также требует навыков работы с криптографией в 1С.

Если в 1С неправильно выставить флаги использования SSL, вы можете получить следующие ошибки:

  1. «Ошибка при вызове метода контекста (Подключиться): Неверное имя или пароль» (хотя пароль верный).
  2. «Удаленный хост принудительно разорвал существующее подключение» (Error 10054/10053).
  3. «Call to SSPI failed» — ошибка протокола безопасности.

Проанализируем, как настроить подключение правильно, чтобы избежать этих ситуаций.

Настройка ИнтернетПочтовогоПрофиля для SSL (Порт 465)

Рассмотрим наиболее частый сценарий: отправка через почтовый сервер (например, Яндекс или Google), требующий SSL соединения на порту 465. Для реализации этой задачи нам потребуется объект ИнтернетПочтовыйПрофиль.

Разберем по шагам, какие свойства необходимо установить:

  1. Адрес сервера и порт: Указываем адрес SMTP сервера и порт 465.
  2. Пользователь и пароль: Важно! Если вы используете публичные сервисы (Яндекс, Google), обычный пароль от почты часто не подходит. Необходимо создать Пароль приложений в настройках безопасности вашего почтового аккаунта.
  3. Таймаут: Рекомендуется увеличить таймаут, так как шифрованное соединение требует больше времени на установку.
  4. Использование SSL: Это критический момент. Свойство ИспользоватьSSLSMTP должно быть установлено в Истина.
  5. Только защищенная аутентификация: Часто это свойство (ТолькоЗащищеннаяАутентификацияSMTP) вызывает путаницу. Для большинства современных серверов его нужно устанавливать в Ложь, так как шифруется сам канал (SSL), а внутри него проходит обычная аутентификация.

Посмотрим на пример кода, который реализует правильную настройку (для быстрого получения каркаса кода можно использовать консоль кода с ИИ-помощником):


Профиль = Новый ИнтернетПочтовыйПрофиль;

// Настройки соединения
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP         = 465; 
Профиль.ПользовательSMTP = "user@yandex.ru";
Профиль.ПарольSMTP       = "ваш_пароль_приложения"; // Не основной пароль!

// Критически важные настройки безопасности
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Ложь; 

// Дополнительные параметры
Профиль.ВремяОжидания = 60; // Увеличиваем таймаут до 60 секунд
Профиль.Поп3ПередSMTP = Ложь; // Для современных серверов это обычно не требуется

Формирование и отправка письма

После настройки профиля, нам необходимо создать само письмо и выполнить подключение. Для этого используем объекты ИнтернетПочтовоеСообщение и ИнтернетПочта.

Обратите внимание на обработку ошибок. Сетевые операции нестабильны, поэтому всегда следует оборачивать попытку подключения и отправки в конструкцию Попытка ... Исключение.

Разберем полный алгоритм отправки:


// 1. Создаем письмо
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Тестовое сообщение из 1С (SSL)";
Письмо.Тексты.Добавить("Это текст письма, отправленного через защищенное соединение.");
Письмо.Получатели.Добавить("client@mail.com");
Письмо.Отправитель.Адрес = "user@yandex.ru";
Письмо.ИмяОтправителя = "Робот 1С";

// 2. Инициализируем объект почты
Почта = Новый ИнтернетПочта;

Попытка
    // 3. Подключаемся к серверу
    // Второй параметр "ОписыватьОшибку" при подключении не обязателен, 
    // но полезен для отладки, если мы не используем Попытку
    Почта.Подключиться(Профиль);
    
    // 4. Отправляем письмо
    Почта.Послать(Письмо);
    
    // 5. Отключаемся
    Почта.Отключиться();
    
    Сообщить("Письмо успешно отправлено!");
    
Исключение
    // Выводим подробное описание ошибки для диагностики
    ОписаниеОшибки = ИнформацияОбОшибке();
    Сообщить("Не удалось отправить письмо: " + ПодробноеПредставлениеОшибки(ОписаниеОшибки));
    
    // Если подключение было установлено, но ошибка возникла при отправке - отключаемся
    Попытка
        Почта.Отключиться();
    Исключение
    КонецПопытки;
КонецПопытки;

Использование TLS (STARTTLS) на порту 587

Иногда серверы требуют использования порта 587. Это работает немного иначе: соединение начинается как незащищенное, а затем переключается в шифрованный режим командой STARTTLS.

В этом случае настройки профиля будут отличаться. Проанализируем различия:


Профиль.ПортSMTP = 587;
// В старых версиях платформы (до 8.3.8) логика могла отличаться, 
// но в современных версиях ИспользоватьSSLSMTP часто корректно обрабатывает и этот сценарий,
// однако иногда требуется явная настройка только порта без флага SSL,
// полагаясь на автоматическое определение.
// Но для явного SSL/TLS лучше использовать порт 465 и флаг ИспользоватьSSLSMTP = Истина.

Рекомендация: Если у вас есть выбор, используйте порт 465 и ИспользоватьSSLSMTP = Истина. Это наиболее стабильный вариант для платформы 1С:Предприятие 8.3.

Диагностика ошибок при подключении

Если код написан верно, но отправка не идет, проверим системные настройки:

  1. Версия платформы: Старые версии платформы (ниже 8.3.8) имеют ограниченную поддержку современных протоколов шифрования TLS 1.2. Если ваш почтовый провайдер отключил поддержку старых протоколов (SSLv3, TLS 1.0), а платформа старая — обновление платформы обязательно.
  2. Настройки OpenSSL в conf.cfg: Если вы работаете на сервере Linux, убедитесь, что библиотеки OpenSSL настроены корректно.
  3. Блокировка антивирусом/брандмауэром: Программы защиты могут блокировать исходящий трафик на порту 465 или пытаться подменить SSL сертификат своим (для проверки трафика), что вызывает ошибку проверки сертификата в 1С. Попробуйте временно отключить проверку почтового трафика.

Особенности отправки вложений

Часто требуется отправить не просто текст, а печатную форму в формате PDF или Excel. Дополним наш код примером добавления вложения.


// Представим, что у нас есть путь к файлу
ПутьКФайлу = "C:\Reports\Invoice.pdf";

// Проверяем существование файла
ФайлНаДиске = Новый Файл(ПутьКФайлу);
Если ФайлНаДиске.Существует() Тогда
    // Добавляем вложение в письмо
    // Можно задать имя, которое увидит получатель
    Письмо.Вложения.Добавить(ПутьКФайлу, "СчетНаОплату.pdf");
Иначе
    Сообщить("Файл вложения не найден!");
КонецЕсли;

Резюме

Для успешной настройки почты в 1С необходимо внимательно отнестись к параметрам безопасности. Используйте Пароли приложений вместо обычных паролей от аккаунта, корректно указывайте порт 465 и обязательно включайте флаг ИспользоватьSSLSMTP. Если возникают ошибки уровня "Call to SSPI failed", в первую очередь проверяйте версию платформы 1С и отсутствие блокировок со стороны антивирусного ПО.

← На главную