Как создать внешнюю обработку для автоматической рассылки писем из 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Автоматизация почтовых уведомлений — это одна из наиболее востребованных задач в среде 1С. Будь то рассылка счетов клиентам, уведомление сотрудников о новых задачах или отправка отчетов руководству, механизм должен работать надежно и незаметно для пользователя. В этой статье мы разберем, как с нуля создать внешнюю обработку, которая позволит реализовать этот функционал, учитывая современные требования безопасности и возможности платформы.

Выбор метода реализации: БСП против встроенных объектов платформы

Прежде чем приступать к написанию кода, проанализируем, какие инструменты есть в нашем распоряжении. Если мы работаем в современной конфигурации (например, 1С:ERP, УТ 11 или БП 3.0), в ней наверняка установлена Библиотека стандартных подсистем (БСП). Это значительно упрощает задачу, так как многие рутинные операции уже описаны в программном интерфейсе библиотеки.

Рассмотрим вариант использования БСП. Основным методом здесь является ОтправитьПочтовоеСообщение из общего модуля РаботаСПочтовымиСообщениями. Это "высокоуровневый" подход, который сам заботится о правильной кодировке и структуре сообщения.

Если же конфигурация самописная или старая, нам придется использовать встроенные объекты платформы: ИнтернетПочтовыйПрофиль и ИнтернетПочта. Разберем оба варианта подробнее.

Настройка почтового профиля и безопасность

Для отправки письма 1С должна знать, через какой сервер и под каким пользователем это делать. Для этого служит объект ИнтернетПочтовыйПрофиль. Проанализируем основные параметры, которые необходимо заполнить:

  1. Адрес сервера SMTP: например, smtp.mail.ru или smtp.gmail.com.
  2. Порт: обычно 465 для SSL или 587 для TLS.
  3. Логин и пароль: учетные данные почтового ящика.
  4. Использование безопасной связи: флаг ИспользоватьSSLSMTP.

Важный нюанс: Современные почтовые сервисы (Yandex, Mail.ru, Gmail) больше не позволяют использовать основной пароль от почты для сторонних программ. Выясним причину: это сделано для защиты аккаунта. Вам необходимо зайти в настройки безопасности почтового ящика и создать специальный "Пароль приложения". Именно его нужно указывать в коде 1С, иначе сервер вернет ошибку авторизации.

Посмотрим на пример инициализации профиля в коде:


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 465;
Профиль.Пользователь = "my-robot@yandex.ru";
Профиль.Пароль = "ваш_пароль_приложения"; // Полученный в настройках почты
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоАутентификацияSMTP = Истина;
Профиль.ВремяОжидания = 30;

Формирование и отправка сообщения

После того как профиль настроен, нам нужно создать само письмо. Для этого используется объект ИнтернетПочтовоеСообщение. Выясним, как правильно заполнить его структуру, чтобы письмо не попало в спам и корректно отображалось у получателя.

Разберем по шагам создание сообщения:

  1. Указываем отправителя (адрес и имя).
  2. Добавляем получателей в коллекцию Получатели.
  3. Задаем тему и текст сообщения.
  4. При необходимости прикрепляем файлы через коллекцию Вложения.

Проанализируем пример кода для отправки простого текстового письма:


Почта = Новый ИнтернетПочта;
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Отправитель.Адрес = "my-robot@yandex.ru";
Сообщение.Отправитель.ОтображаемоеИмя = "Робот 1С";

НовыйПолучатель = Сообщение.Получатели.Добавить("client@example.com");
Сообщение.Тема = "Уведомление из системы 1С";

ТекстПисьма = "Добрый день! Ваша заявка успешно обработана.";
Сообщение.Тексты.Добавить(ТекстПисьма, ТипТекстаПочтовогоСообщения.ПростойТекст);

Попытка
    Почта.Подключиться(Профиль);
    Почта.Отправить(Сообщение);
    Почта.Отключиться();
    Сообщить("Письмо успешно отправлено!");
Исключение
    Сообщить("Ошибка при отправке: " + ОписаниеОшибки());
КонецПопытки;

Использование HTML для оформления писем

Для создания профессионально выглядящих писем с форматированием, таблицами или изображениями обычного текста недостаточно. В 1С мы можем использовать тип текста HTML. Рассмотрим подробнее, как это реализовать. Вместо ТипТекстаПочтовогоСообщения.ПростойТекст мы указываем HTML и передаем строку с HTML-версткой.

Практический совет: Если вы хотите вставить логотип компании прямо в тело письма, лучше использовать механизм CID-идентификаторов. Это позволит картинке отображаться сразу, а не висеть отдельным вложением в конце письма.


ТекстHTML = "<html><body><h1>Важное уведомление</h1><p>Текст с <strong>жирным шрифтом</strong>.</p></body></html>";
Сообщение.Тексты.Добавить(ТекстHTML, ТипТекстаПочтовогоСообщения.HTML);

Оптимизация: работа в фоновом режиме

Одной из проблем, упомянутых в обсуждении, является "подвисание" интерфейса при отправке. Процесс установления соединения с сервером и передачи данных может занимать от нескольких секунд до минуты (в зависимости от размера вложений и качества интернета). Чтобы пользователь не ждал, пока 1С "отвиснет", рассылку крайне рекомендуется выполнять в фоновом задании.

Разберем алгоритм действий:

  1. Пользователь нажимает кнопку в обработке.
  2. Программа собирает данные (адреса, текст) и передает их в серверную процедуру.
  3. Серверная процедура запускает ФоновыеЗадания.Выполнить.
  4. Пользователь сразу получает сообщение "Письмо поставлено в очередь на отправку" и продолжает работу.
  5. Фоновое задание в это время спокойно взаимодействует с почтовым сервером.

Интеграция с подсистемами CRM

В типовых конфигурациях часто выгоднее не отправлять письмо "напрямую" через низкоуровневые объекты, а создавать документ ЭлектронноеПисьмоИсходящее. Это дает ряд преимуществ:

Для реализации этого метода в рамках внешней обработки мы программно создаем новый документ, заполняем его реквизиты и устанавливаем статус КОтправке.

Лимиты и контроль корректности

Проанализируем риски массовых рассылок. Обычные почтовые сервера имеют жесткие лимиты на количество писем. Если вы попытаетесь отправить 1000 писем за 10 минут, ваш IP или ящик будут заблокированы. Для больших объемов данных мы рекомендуем использовать специализированные API сервисов рассылок через HTTP-запросы в 1С.

Также перед отправкой обязательно проверяйте валидность email-адреса. Простейшая проверка на наличие символа "@" и точки в домене убережет ваш код от ошибок исполнения при попытке отправить письмо на некорректный адрес.

Подводя итог, создание внешней обработки для рассылки — это комплексная задача, требующая внимания к настройкам безопасности (пароли приложений), выбору правильного метода (БСП или ИнтернетПочта) и заботе о пользователе (фоновое выполнение). Следуя описанным шагам, вы сможете создать надежный инструмент для коммуникации системы 1С с внешним миром.

← На главную