Email-уведомления из 1С: миграция со сторонних мессенджеров на корпоративную почту
Многие команды годами строили оповещения из 1С через сторонние мессенджеры. Сейчас часть из них стала недоступной для российских пользователей, и поток вопросов на профильных форумах сместился: «как перевести уведомления на корпоративную почту». Разбираем, как сделать это штатными средствами платформы — без внешних компонент и без зависимости от инфраструктуры, которую вы не контролируете.
Почему именно почта
SMTP-инфраструктура есть в каждой организации, она не блокируется на уровне страны, маршруты прозрачны для службы ИБ, история сообщений хранится в почтовом ящике сама собой. Платформа 1С:Предприятие 8.3 умеет работать с почтой через объекты ИнтернетПочтовыйПрофиль, ИнтернетПочта и ИнтернетПочтовоеСообщение — это часть стандартной поставки, никаких сторонних библиотек ставить не нужно.
Что меняется в коде по сравнению с «ботом»
Логически — почти ничего: была одна функция «отправить текст в чат», станет «отправить письмо адресату». Все паттерны вокруг (очередь, регламентное задание, обработка ошибок, журнал регистрации) сохраняются один в один.
Минимальный пример: отправка одного письма
Функция ОтправитьПисьмо(АдресПолучателя, Тема, ТекстПисьма) Экспорт
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.example.ru";
Профиль.ПортSMTP = 465;
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ПользовательSMTP = "noreply@example.ru";
Профиль.ПарольSMTP = ПолучитьПарольИзЗащищенногоХранилища();
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = Тема;
Письмо.Отправитель = "noreply@example.ru";
Письмо.Кому.Добавить(АдресПолучателя);
Письмо.ТекстыСообщения.Добавить(ТекстПисьма, ТипТекстаПочтовогоСообщения.ПростойТекст);
Почта = Новый ИнтернетПочта;
Результат = "";
Попытка
Почта.Подключиться(Профиль);
Почта.Послать(Письмо);
Результат = "ok";
Исключение
Результат = "Ошибка отправки: " + ОписаниеОшибки();
КонецПопытки;
Попытка
Почта.Отключиться();
Исключение
// соединение могло не открыться — это нормально
КонецПопытки;
Возврат Результат;
КонецФункции
Пароль никогда не храните ни в коде, ни в открытой константе. Используйте защищённое хранилище:УстановитьДанныеЗащищенногоХранилищапри настройке иПолучитьДанныеЗащищенногоХранилищапри отправке. Доступ к этому хранилищу есть только на сервере, что отрезает целый класс утечек.
Сравнение подходов: мессенджер-бот и почта
| Параметр | Бот в мессенджере | Корпоративная почта |
|---|---|---|
| Зависимость от внешней инфраструктуры | Полная — сторонний сервис, чужие домены, чужие правила | Минимальная — собственный почтовый сервер или провайдер на договоре |
| Доставляемость в РФ-периметре | Может пропасть в любой момент по причинам вне вашего контроля | Стабильна, ограничения на уровне почтового домена |
| История сообщений | В чате, легко теряется при смене устройства | В почтовом ящике, индексируется и архивируется штатно |
| Сложность интеграции из 1С | HTTP-запросы + сериализация JSON + лимиты Bot API | Один объект платформы, без сторонних библиотек |
| Подходит для срочных уведомлений | Да, push приходит мгновенно | С небольшой задержкой; решается push-уведомлениями почтового клиента |
Очередь и регламентное задание
Прямой вызов отправки из ПриЗаписи документа — анти-паттерн: пользователь будет ждать SMTP-сессию. Правильный шаблон:
- В обработчике события объекта (например,
ПриЗаписирегистра «Заявки») добавляйте запись в регистр сведений-очередь: получатель, тема, тело, дата постановки в очередь. - Регламентное задание «Рассылка уведомлений по почте» с шагом 1–3 минуты выбирает неотправленные записи, отправляет их через
ИнтернетПочта.Послать, помечает успешные. - Записывайте каждую попытку в журнал регистрации (
ЗаписьЖурналаРегистрации) с уровнямиУровеньЖурналаРегистрации.Информациядля успеха иУровеньЖурналаРегистрации.Ошибка— для отказа. - На каждый адрес отправляйте не чаще одного письма в минуту: иначе SMTP-сервер посчитает вас спамером, и письма начнут попадать в «нежелательные».
- Все письма от служебных аккаунтов (
noreply@…) должны иметь корректные SPF/DKIM/DMARC у домена — иначе доставляемость рухнет.
Чек-лист миграции
- Заведите служебный почтовый ящик
noreply@и согласуйте его с администратором почты. - Сохраните пароль в защищённом хранилище: одноразово вызовите
УстановитьДанныеЗащищенногоХранилищаиз серверного кода (например, из обработки настройки рассылки). - Создайте регистр сведений «ОчередьУведомлений» (адрес, тема, тело, статус, дата).
- Перенаправьте существующие вызовы «отправить в чат» на новую функцию «положить в очередь».
- Включите регламентное задание-рассыльщик, задайте расписание с шагом 1–3 минуты.
- На тестовом контуре выключите SMTP-сервер на 10 минут и убедитесь, что письма не теряются — только остаются в очереди со статусом «ошибка».
Типичные ошибки
- Пароль в открытой константе. Любой, кто видит конфигуратор, получает доступ к служебному ящику.
- Синхронная отправка из событий объектов. Запись документа подвисает на длительность SMTP-сессии.
- Без SSL/TLS. Современные почтовые сервера давно не принимают незашифрованные подключения;
ИспользоватьSSLSMTP = Истинаи порт 465 (или STARTTLS на 587) — обязательны. - Отсутствие повторных попыток. Сеть периодически шуршит — без ретрая через 5–10 минут уведомления теряются.
- Письма без человеческого Subject. «Уведомление из 1С» во всех письмах превращает почтовый ящик в свалку. В теме указывайте номер документа и тип события.
- Один общий ящик для всего. Разделяйте служебные и аналитические уведомления хотя бы на уровне отдельных адресов — иначе фильтры почтового клиента не помогут.
Профессиональные решения для 1С и marketplace-интеграций — каталог отчётов и инструментов на витрине НОПи.
Перейти в каталог решений →
Перейти в каталог решений →