Автоматизация почтовых уведомлений — это одна из наиболее востребованных задач в среде 1С. Будь то рассылка счетов клиентам, уведомление сотрудников о новых задачах или отправка отчетов руководству, механизм должен работать надежно и незаметно для пользователя. В этой статье мы разберем, как с нуля создать внешнюю обработку, которая позволит реализовать этот функционал, учитывая современные требования безопасности и возможности платформы.
Прежде чем приступать к написанию кода, проанализируем, какие инструменты есть в нашем распоряжении. Если мы работаем в современной конфигурации (например, 1С:ERP, УТ 11 или БП 3.0), в ней наверняка установлена Библиотека стандартных подсистем (БСП). Это значительно упрощает задачу, так как многие рутинные операции уже описаны в программном интерфейсе библиотеки.
Рассмотрим вариант использования БСП. Основным методом здесь является ОтправитьПочтовоеСообщение из общего модуля РаботаСПочтовымиСообщениями. Это "высокоуровневый" подход, который сам заботится о правильной кодировке и структуре сообщения.
Если же конфигурация самописная или старая, нам придется использовать встроенные объекты платформы: ИнтернетПочтовыйПрофиль и ИнтернетПочта. Разберем оба варианта подробнее.
Для отправки письма 1С должна знать, через какой сервер и под каким пользователем это делать. Для этого служит объект ИнтернетПочтовыйПрофиль. Проанализируем основные параметры, которые необходимо заполнить:
ИспользоватьSSLSMTP.Важный нюанс: Современные почтовые сервисы (Yandex, Mail.ru, Gmail) больше не позволяют использовать основной пароль от почты для сторонних программ. Выясним причину: это сделано для защиты аккаунта. Вам необходимо зайти в настройки безопасности почтового ящика и создать специальный "Пароль приложения". Именно его нужно указывать в коде 1С, иначе сервер вернет ошибку авторизации.
Посмотрим на пример инициализации профиля в коде:
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 465;
Профиль.Пользователь = "my-robot@yandex.ru";
Профиль.Пароль = "ваш_пароль_приложения"; // Полученный в настройках почты
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоАутентификацияSMTP = Истина;
Профиль.ВремяОжидания = 30;
После того как профиль настроен, нам нужно создать само письмо. Для этого используется объект ИнтернетПочтовоеСообщение. Выясним, как правильно заполнить его структуру, чтобы письмо не попало в спам и корректно отображалось у получателя.
Разберем по шагам создание сообщения:
Получатели.Вложения.Проанализируем пример кода для отправки простого текстового письма:
Почта = Новый ИнтернетПочта;
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Отправитель.Адрес = "my-robot@yandex.ru";
Сообщение.Отправитель.ОтображаемоеИмя = "Робот 1С";
НовыйПолучатель = Сообщение.Получатели.Добавить("client@example.com");
Сообщение.Тема = "Уведомление из системы 1С";
ТекстПисьма = "Добрый день! Ваша заявка успешно обработана.";
Сообщение.Тексты.Добавить(ТекстПисьма, ТипТекстаПочтовогоСообщения.ПростойТекст);
Попытка
Почта.Подключиться(Профиль);
Почта.Отправить(Сообщение);
Почта.Отключиться();
Сообщить("Письмо успешно отправлено!");
Исключение
Сообщить("Ошибка при отправке: " + ОписаниеОшибки());
КонецПопытки;
Для создания профессионально выглядящих писем с форматированием, таблицами или изображениями обычного текста недостаточно. В 1С мы можем использовать тип текста HTML. Рассмотрим подробнее, как это реализовать. Вместо ТипТекстаПочтовогоСообщения.ПростойТекст мы указываем HTML и передаем строку с HTML-версткой.
Практический совет: Если вы хотите вставить логотип компании прямо в тело письма, лучше использовать механизм CID-идентификаторов. Это позволит картинке отображаться сразу, а не висеть отдельным вложением в конце письма.
ТекстHTML = "<html><body><h1>Важное уведомление</h1><p>Текст с <strong>жирным шрифтом</strong>.</p></body></html>";
Сообщение.Тексты.Добавить(ТекстHTML, ТипТекстаПочтовогоСообщения.HTML);
Одной из проблем, упомянутых в обсуждении, является "подвисание" интерфейса при отправке. Процесс установления соединения с сервером и передачи данных может занимать от нескольких секунд до минуты (в зависимости от размера вложений и качества интернета). Чтобы пользователь не ждал, пока 1С "отвиснет", рассылку крайне рекомендуется выполнять в фоновом задании.
Разберем алгоритм действий:
ФоновыеЗадания.Выполнить.В типовых конфигурациях часто выгоднее не отправлять письмо "напрямую" через низкоуровневые объекты, а создавать документ ЭлектронноеПисьмоИсходящее. Это дает ряд преимуществ:
Для реализации этого метода в рамках внешней обработки мы программно создаем новый документ, заполняем его реквизиты и устанавливаем статус КОтправке.
Проанализируем риски массовых рассылок. Обычные почтовые сервера имеют жесткие лимиты на количество писем. Если вы попытаетесь отправить 1000 писем за 10 минут, ваш IP или ящик будут заблокированы. Для больших объемов данных мы рекомендуем использовать специализированные API сервисов рассылок через HTTP-запросы в 1С.
Также перед отправкой обязательно проверяйте валидность email-адреса. Простейшая проверка на наличие символа "@" и точки в домене убережет ваш код от ошибок исполнения при попытке отправить письмо на некорректный адрес.
Подводя итог, создание внешней обработки для рассылки — это комплексная задача, требующая внимания к настройкам безопасности (пароли приложений), выбору правильного метода (БСП или ИнтернетПочта) и заботе о пользователе (фоновое выполнение). Следуя описанным шагам, вы сможете создать надежный инструмент для коммуникации системы 1С с внешним миром.