В процессе разработки в системе 1С:Предприятие часто возникает задача автоматизации почтовых рассылок. Это может быть уведомление клиента о заказе, отправка счета бухгалтеру или рассылка регламентных отчетов. В данной статье мы подробно разберем, как реализовать этот механизм, используя встроенные средства платформы 1С. Для решения этой задачи без изменения конфигурации можно использовать готовое расширение для отправки почтовых сообщений с вложениями.
Для решения задачи нам потребуется взаимодействие с объектами, работающими по протоколам SMTP (для отправки) и POP3/IMAP (для получения, если это необходимо). Основными объектами для нас станут ИнтернетПочтовыйПрофиль, ИнтернетПочтовоеСообщение и ИнтернетПочта. Разберем этот процесс по шагам, от настройки учетной записи до обработки ошибок связи.
Прежде чем отправить письмо, нам нужно «объяснить» программе, через какой почтовый сервер будет проходить транзакция. Для этого используется объект ИнтернетПочтовыйПрофиль. В нем хранятся параметры авторизации, адреса серверов и настройки безопасности (например, использование SSL).
Проанализируем основные параметры, которые необходимо заполнить. Нам потребуются: адрес SMTP-сервера, порт, логин и пароль пользователя. Если ваш почтовый сервис (например, Gmail, Yandex или Mail.ru) требует защищенное соединение, важно правильно указать использование SSL и STARTTLS.
Рассмотрим пример кода для инициализации профиля:
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "vasha_pochta@mail.ru";
Профиль.ПарольSMTP = "vash_parol_prilozheniya";
Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Ложь;
Профиль.ИспользоватьSSLSMTP = Истина;
Обратите внимание на пароли приложений. Современные почтовые сервисы запрещают использовать основной пароль от почты для сторонних программ. Вам необходимо зайти в настройки безопасности вашего почтового ящика и сгенерировать специальный пароль для 1С.
Теперь, когда профиль готов, перейдем к формированию самого письма. За это отвечает объект ИнтернетПочтовоеСообщение. Здесь мы указываем отправителя, список получателей, тему письма и его текст (тело). Письмо может быть как обычным текстовым, так и в формате HTML.
Разберем, как правильно заполнить структуру сообщения. Важно помнить, что получателей может быть несколько, поэтому они добавляются в коллекцию Получатели. Для отправителя также создается объект Адрес.
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Отправитель.Адрес = "vasha_pochta@mail.ru";
Письмо.Отправитель.ОтображаемоеИмя = "Робот 1С";
НовыйПолучатель = Письмо.Получатели.Добавить();
НовыйПолучатель.Адрес = "client@example.com";
НовыйПолучатель.ОтображаемоеИмя = "Уважаемый Клиент";
Письмо.Тема = "Счет на оплату №123 от " + ТекущаяДата();
// Текст письма в формате HTML
ТекстСообщения = "<html><body>";
ТекстСообщения = ТекстСообщения + "<h1>Здравствуйте!</h1>";
ТекстСообщения = ТекстСообщения + "<p>Во вложении находится ваш счет.</p>";
ТекстСообщения = ТекстСообщения + "</body></html>";
Письмо.Тексты.Добавить(ТекстСообщения, ТипТекстаПочтовогоСообщения.HTML);
Использование HTML позволяет форматировать текст, добавлять таблицы, выделения и даже встроенные изображения. Однако помните, что некоторые почтовые клиенты могут блокировать сложную верстку в целях безопасности.
Одной из ключевых задач является прикрепление файлов. Это могут быть печатные формы документов (PDF), прайс-листы (Excel) или отчеты. Для добавления файла в письмо используется коллекция Вложения.
Выясним, как это работает программно. Нам нужно передать путь к файлу на диске или двоичные данные. Рекомендуется использовать полное имя файла. Посмотрим на практический пример добавления вложения:
ПутьКФайлу = "C:\Temp\Invoice_123.pdf";
ФайлВложения = Письмо.Вложения.Добавить(ПутьКФайлу);
ФайлВложения.Имя = "Счет_на_оплату_123.pdf";
Важный момент: если вы работаете в клиент-серверном варианте, файл должен быть доступен серверу 1С. Если файл создается на клиенте, его необходимо сначала передать на сервер во временное хранилище, а затем сохранить во временный файл на стороне сервера перед отправкой. Для правильной организации такой передачи подойдёт руководство по работе с файлами в клиент-серверной версии 1С 8.3.
Когда профиль настроен, а сообщение сформировано, наступает этап непосредственной отправки через объект ИнтернетПочта. Процесс состоит из трех стадий: подключение к серверу, отправка сообщения и отключение.
Поскольку работа с сетью всегда сопряжена с рисками (отсутствие интернета, блокировка порта брандмауэром, неверный логин), крайне важно использовать конструкцию Попытка...Исключение. Это позволит программе не «рухнуть» при возникновении сетевой ошибки, а корректно сообщить о ней пользователю или записать в журнал регистрации.
Проанализируем полный цикл отправки:
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль);
Почта.Послать(Письмо);
Сообщить("Письмо успешно отправлено!");
Исключение
Сообщить("Произошла ошибка при отправке: " + ОписаниеОшибки());
// Запись ошибки в Журнал регистрации для администратора
ЗаписьЖурналаРегистрации("ОтправкаПочты", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
КонецПопытки;
Почта.Отключиться();
Метод Послать() является блокирующим. Это значит, что пока письмо не будет передано на SMTP-сервер, выполнение кода приостановится. Если вы планируете отправлять сотни писем за раз, рассмотрите возможность выноса этого процесса в ФоновыеЗадания, чтобы пользователь не ждал завершения операции.
Разберем по шагам специфику популярных сервисов. У каждого из них есть свои нюансы настройки ИнтернетПочтовыйПрофиль.
smtp.yandex.ru, Порт: 465. Обязательно использование SSL.smtp.mail.ru, Порт: 465. Требует создания «Пароля для внешних приложений».smtp.gmail.com, Порт: 465 или 587. В аккаунте Google должна быть включена двухфакторная аутентификация и создан пароль приложения.Если при попытке подключения вы получаете ошибку «Authentication failed», в 99% случаев проблема заключается именно в пароле или в том, что доступ для «ненадежных приложений» заблокирован в настройках самого почтового сервиса.
Для создания профессионального решения мы рекомендуем хранить настройки почтового профиля в специальном справочнике (например, «УчетныеЗаписиЭлектроннойПочты»). Это позволит менять пароль или адрес сервера без правки программного кода. Также стоит продумать механизм ведения логов: фиксируйте дату, время и статус каждой отправки в отдельном регистре сведений.
Рассмотрим ситуацию, когда нужно отправить отчет. Мы можем использовать метод СкомпоноватьРезультат() для СКД, сохранить его во временный файл XLSX или PDF, а затем прикрепить к письму, как было показано выше. После отправки не забывайте удалять временные файлы с помощью команды УдалитьФайлы(), чтобы не засорять дисковое пространство сервера.
В завершение подчеркнем: стабильность работы почтового модуля в 1С зависит не только от вашего кода, но и от сетевой инфраструктуры. Убедитесь, что антивирусы на сервере не блокируют исходящие соединения по портам 465 и 587, а ваш IP-адрес не находится в спам-листах.
Мы детально проанализировали процесс программной отправки почты. Используя приведенные примеры кода и рекомендации, вы сможете создать надежный инструмент для обмена информацией между вашей системой 1С и внешним миром.