Отправка электронной почты — одна из самых востребованных функций в корпоративных системах. Счета, уведомления, отчеты — все это ежедневно отправляется из 1С. Однако при переходе почтовых сервисов (таких как Yandex, Mail.ru, Gmail) на обязательное использование шифрования SSL/TLS, многие разработчики сталкиваются с ошибками подключения.
Рассмотрим подробно, как правильно настроить ИнтернетПочтовыйПрофиль для работы с защищенными протоколами в рамках защищенной IT инфраструктуры, разберем основные ошибки (например, сбои при рукопожатии SSL или ошибки аутентификации) и проанализируем рабочий код, который поможет избежать этих проблем.
Прежде чем переходить к написанию кода, давайте выясним, почему старые методы перестали работать. Раньше для отправки почты использовался 25-й порт и простая аутентификация. Сейчас стандартом безопасности является использование портов 465 (SSL) или 587 (TLS), что также требует навыков работы с криптографией в 1С.
Если в 1С неправильно выставить флаги использования SSL, вы можете получить следующие ошибки:
Проанализируем, как настроить подключение правильно, чтобы избежать этих ситуаций.
Рассмотрим наиболее частый сценарий: отправка через почтовый сервер (например, Яндекс или Google), требующий SSL соединения на порту 465. Для реализации этой задачи нам потребуется объект ИнтернетПочтовыйПрофиль.
Разберем по шагам, какие свойства необходимо установить:
ИспользоватьSSLSMTP должно быть установлено в Истина.ТолькоЗащищеннаяАутентификация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. Отключаемся
Почта.Отключиться();
Сообщить("Письмо успешно отправлено!");
Исключение
// Выводим подробное описание ошибки для диагностики
ОписаниеОшибки = ИнформацияОбОшибке();
Сообщить("Не удалось отправить письмо: " + ПодробноеПредставлениеОшибки(ОписаниеОшибки));
// Если подключение было установлено, но ошибка возникла при отправке - отключаемся
Попытка
Почта.Отключиться();
Исключение
КонецПопытки;
КонецПопытки;
Иногда серверы требуют использования порта 587. Это работает немного иначе: соединение начинается как незащищенное, а затем переключается в шифрованный режим командой STARTTLS.
В этом случае настройки профиля будут отличаться. Проанализируем различия:
Профиль.ПортSMTP = 587;
// В старых версиях платформы (до 8.3.8) логика могла отличаться,
// но в современных версиях ИспользоватьSSLSMTP часто корректно обрабатывает и этот сценарий,
// однако иногда требуется явная настройка только порта без флага SSL,
// полагаясь на автоматическое определение.
// Но для явного SSL/TLS лучше использовать порт 465 и флаг ИспользоватьSSLSMTP = Истина.
Рекомендация: Если у вас есть выбор, используйте порт 465 и ИспользоватьSSLSMTP = Истина. Это наиболее стабильный вариант для платформы 1С:Предприятие 8.3.
Если код написан верно, но отправка не идет, проверим системные настройки:
Часто требуется отправить не просто текст, а печатную форму в формате PDF или Excel. Дополним наш код примером добавления вложения.
// Представим, что у нас есть путь к файлу
ПутьКФайлу = "C:\Reports\Invoice.pdf";
// Проверяем существование файла
ФайлНаДиске = Новый Файл(ПутьКФайлу);
Если ФайлНаДиске.Существует() Тогда
// Добавляем вложение в письмо
// Можно задать имя, которое увидит получатель
Письмо.Вложения.Добавить(ПутьКФайлу, "СчетНаОплату.pdf");
Иначе
Сообщить("Файл вложения не найден!");
КонецЕсли;
Для успешной настройки почты в 1С необходимо внимательно отнестись к параметрам безопасности. Используйте Пароли приложений вместо обычных паролей от аккаунта, корректно указывайте порт 465 и обязательно включайте флаг ИспользоватьSSLSMTP. Если возникают ошибки уровня "Call to SSPI failed", в первую очередь проверяйте версию платформы 1С и отсутствие блокировок со стороны антивирусного ПО.