В процессе автоматизации бизнес-процессов часто возникает необходимость информирования пользователей или контрагентов посредством электронной почты. В некоторых задачах требуется сложная логика планирования, например, установка расписания рассылок отчетов по рабочим дням. Рассмотрим подробнее, как реализовать отправку писем непосредственно из кода 1С, используя встроенные объекты платформы. Мы разберем создание профиля подключения, формирование самого письма, добавление вложений и нюансы работы с современными почтовыми серверами (такими как Yandex или Google), требующими шифрования SSL.
Для взаимодействия с почтовыми серверами по протоколу SMTP в платформе 1С:Предприятие 8.3 предусмотрен специальный набор объектов. Проанализируем их назначение:
ИнтернетПочта — основной объект, управляющий соединением с сервером и отправкой/получением сообщений.ИнтернетПочтовыйПрофиль — объект, в котором мы задаем настройки подключения (адрес сервера, порт, логин, пароль, таймауты).ИнтернетПочтовоеСообщение — объект, представляющий само письмо (тема, текст, получатели, вложения).Разберем процесс создания механизма отправки по шагам. Если вы хотите внедрить подобный функционал без изменения основной конфигурации, можно использовать готовое расширение для отправки и получения почтовых сообщений.
Первым делом нам необходимо настроить параметры соединения. Большинство современных почтовых сервисов требуют использования защищенного соединения (SSL) и специальных портов (обычно 465 или 587). Также стоит учесть, что для сервисов вроде Gmail или Yandex часто требуется использование не основного пароля от аккаунта, а специально сгенерированного "Пароля приложений".
Посмотрим на пример кода настройки профиля:
Функция СоздатьПрофильSMTP()
Профиль = Новый ИнтернетПочтовыйПрофиль;
// Адрес SMTP сервера (например, для Яндекс: smtp.yandex.ru)
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
// Порт SMTP (465 для SSL, 587 для TLS, 25 для незащищенного)
Профиль.ПортSMTP = 465;
// Пользователь и пароль
Профиль.ПользовательSMTP = "vash_login@yandex.ru";
Профиль.ПарольSMTP = "vash_app_password"; // Пароль приложения!
// Настройки безопасности
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Истина;
// Время ожидания в секундах
Профиль.Таймаут = 30;
Возврат Профиль;
КонецФункции
Обратите внимание: Если вы используете корпоративный почтовый сервер без SSL, параметры ИспользоватьSSLSMTP следует установить в Ложь, а порт изменить на стандартный (обычно 25 или 2525).
Теперь создадим само письмо. Нам необходимо указать отправителя, получателя, тему и текст. Особое внимание уделим добавлению файлов. Рассмотрим пример, где мы отправляем текстовое сообщение и прикладываем к нему файл (например, счет на оплату в формате PDF).
Функция ПодготовитьПисьмо(АдресПолучателя, Тема, ТекстПисьма, ПутьКФайлуВложения = "")
Письмо = Новый ИнтернетПочтовоеСообщение;
// Указываем отправителя (должен совпадать с логином в профиле или быть алиасом)
Письмо.Отправитель = "vash_login@yandex.ru";
// Указываем имя отправителя, которое увидит получатель
Письмо.ИмяОтправителя = "Робот 1С";
// Добавляем получателя
ПочтовыйАдрес = Письмо.Получатели.Добавить(АдресПолучателя);
Письмо.Тема = Тема;
// Работа с текстом письма
// Можно отправить просто текст:
// Письмо.Тексты.Добавить(ТекстПисьма);
// Или отправить HTML (рекомендуется для красивого оформления)
Письмо.Тексты.Добавить(ТекстПисьма, ТипТекстаПочтовогоСообщения.HTML);
// Добавление вложения
Если ЗначениеЗаполнено(ПутьКФайлуВложения) Тогда
ФайлНаДиске = Новый Файл(ПутьКФайлуВложения);
Если ФайлНаДиске.Существует() Тогда
// Метод Добавить принимает путь к файлу
Вложение = Письмо.Вложения.Добавить(ПутьКФайлуВложения);
// Можно переименовать вложение для получателя
Вложение.Имя = "СчетНаОплату.pdf";
КонецЕсли;
КонецЕсли;
Возврат Письмо;
КонецФункции
При формировании текста в формате HTML важно понимать, что такое форматированный документ и как платформа работает с оформлением текста. Для удобства подготовки таких писем в интерфейсе можно использовать визуальный HTML Редактор NicEdit, который позволяет пользователю оформлять текст без знания тегов. Если же ваша задача подразумевает интерактивную работу с вложениями, полезно будет реализовать механизм Drag & Drop для переноса картинок и файлов на форму.
Финальный этап — непосредственная отправка. Здесь критически важно использовать обработку исключений (конструкцию Попытка ... Исключение), так как соединение с интернетом может быть нестабильным. Если вы работаете в типовой конфигурации, вам может пригодиться оптимизация персонализированных рассылок отчетов в БСП, которая позволяет более эффективно управлять массовой отправкой.
Разберем полный алгоритм отправки:
Процедура ОтправитьПисьмоНаСервер(АдресПолучателя, ПутьКФайлу)
// Получаем настроенный профиль
Профиль = СоздатьПрофильSMTP();
// Подготавливаем письмо
Тема = "Ваш счет за услуги";
Текст = "<h1>Добрый день!</h1><p>Во вложении ваш счет.</p>";
Письмо = ПодготовитьПисьмо(АдресПолучателя, Тема, Текст, ПутьКФайлу);
// Создаем объект для соединения
Почта = Новый ИнтернетПочта;
Попытка
// Подключаемся к серверу
Почта.Подключиться(Профиль);
// Выполняем отправку
Почта.Послать(Письмо);
Сообщить("Письмо успешно отправлено на адрес: " + АдресПолучателя);
Исключение
// Выводим информацию об ошибке для диагностики
ОписаниеОшибки = ИнформацияОбОшибке();
Сообщить("Не удалось отправить письмо: " + ПодробноеПредставлениеОшибки(ОписаниеОшибки));
КонецПопытки;
// Обязательно отключаемся от сервера
Если Почта.Подключен() Тогда
Почта.Отключиться();
КонецЕсли;
КонецПроцедуры
Проанализируем типичные ошибки, с которыми сталкиваются разработчики при реализации этого механизма:
telnet smtp.server.com 465.Следуя этой инструкции, вы сможете надежно настроить рассылку уведомлений и документов из вашей конфигурации 1С.