При работе с типовыми конфигурациями на базе Библиотеки стандартных подсистем (БСП), такими как 1С:ERP Управление предприятием, часто возникает задача оперативной отправки уведомлений или «алертов» пользователям — для этого подойдёт автоматическая отправка почтовых уведомлений по расписанию. Если классический подход через создание документа ЭлектронноеПисьмоИсходящее кажется избыточным или требует обязательной работы регламентных заданий, существует более прямой и быстрый способ решения этой задачи.
Перед тем как приступить к написанию кода, важно понимать разницу между двумя подходами к отправке почты в БСП:
ПолучениеИОтправкаЭлектронныхПисем, которое забирает данные из очереди.РаботаСПочтовымиСообщениями напрямую. Этот метод не создает лишних записей в базе данных и отправляет письмо «здесь и сейчас», что отлично подходит для системных уведомлений (есть готовый мониторинг критичных событий и алертинг ответственных лиц).Рассмотрим пошагово, как реализовать отправку почты без лишних сущностей. Весь процесс опирается на возможности БСП. Основным модулем здесь выступает РаботаСПочтовымиСообщениями.
Шаг 1: Получение системной учетной записи.
Для отправки писем от имени системы необходимо инициализировать учетную запись, которая уже настроена в РегистрСведений.УчетныеЗаписиЭлектроннойПочты.
Шаг 2: Подготовка параметров письма. Мы используем структуру, в которую передаем ключевые данные: адрес получателя, тему письма и непосредственно текст сообщения.
Шаг 3: Отправка сообщения. После подготовки структуры, система формирует почтовое сообщение и передает его на SMTP-сервер.
Давайте посмотрим на пример реализации:
// Получаем системную учетную запись для отправки
УчетнаяЗапись = РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись();
// Формируем параметры сообщения
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Кому", "user@example.com");
ПараметрыПисьма.Вставить("Тема", "Тестовое письмо из ERP");
ПараметрыПисьма.Вставить("Тело", "Это автоматическое уведомление, отправленное из обработки.");
// Подготавливаем письмо
Письмо = РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма);
// Выполняем отправку
Попытка
РаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, Письмо);
Исключение
ЗаписьЖурналаРегистрации("ОтправкаПочты", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
КонецПопытки;
При использовании этого метода следует учитывать несколько критических аспектов, которые помогут избежать ошибок при эксплуатации системы:
Попытка...Исключение: Работа с почтой — это внешнее взаимодействие. Сетевые проблемы, недоступность SMTP-сервера или неверные настройки аутентификации могут вызвать прерывание выполнения кода. Всегда оборачивайте отправку в блок обработки исключений, чтобы не блокировать выполнение других бизнес-процессов — в этом поможет система мгновенных уведомлений об ошибках для администратора.ЭлектронноеПисьмоИсходящее, отправка не произойдет, пока активно регламентное задание ПолучениеИОтправкаЭлектронныхПисем (удобно через контроль регламентных заданий с алертами в Telegram). Если регламенты в вашей тестовой среде отключены, письмо «зависнет» в статусе исходящего и не будет отправлено. Именно поэтому процедурный метод (описанный выше) предпочтителен для оперативных уведомлений.СистемнаяУчетнаяЗапись, настройки которой хранятся в защищенных регистрах конфигурации.ПараметрыПисьма легко расширяется. Обратитесь к синтакс-помощнику для модуля РаботаСПочтовымиСообщениями, чтобы увидеть полный перечень поддерживаемых параметров.Таким образом, использование метода РаботаСПочтовымиСообщениями.ОтправитьПисьмо позволяет достичь цели с минимальными затратами ресурсов, не засоряя базу данных объектами, история которых не требуется для бизнес-логики. Для этой задачи есть массовая рассылка печатных форм и файлов по Email и мессенджерам.