В современной разработке на платформе 1С:Предприятие 8.3 автоматизация почтовых уведомлений является одной из приоритетных задач. Будь то отправка счета клиенту, уведомление администратора о сбое или установка расписания рассылок отчетов по рабочим дням — разработчику необходимо понимать механизмы работы встроенного почтового клиента. В данной статье мы подробно проанализируем процесс настройки почтового профиля и написания программного кода для отправки сообщений.
Для начала разберем, какие объекты метаданных и программные сущности нам понадобятся. Основным инструментом взаимодействия с внешними почтовыми серверами по протоколу SMTP является объект ИнтернетПочтовыйПрофиль. Именно в нем хранятся все технические параметры подключения: адреса серверов, порты и учетные данные.
Второй критически важный объект — это ИнтернетПочта. Мы используем его для непосредственного установления соединения и выполнения команды отправки. Само же письмо формируется с помощью объекта ИнтернетПочтовоеСообщение — есть готовое расширение для автоматизации Email-рассылок и уведомлений.
Рассмотрим подробнее процесс заполнения параметров подключения. Важно учитывать, что современные почтовые сервисы (такие как Yandex, Mail.ru или Gmail) требуют обязательного использования защищенного соединения SSL или TLS.
Выясним причину частых ошибок: большинство проблем при подключении связано с неправильным указанием порта или отсутствием флага использования защищенного соединения. Проанализируем стандартный код настройки профиля:
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "mymail@yandex.ru";
Профиль.ПарольSMTP = "ваш_пароль_приложения";
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоМетодAuthLogin = Истина;
Обратим внимание на свойство ТолькоМетодAuthLogin. В некоторых случаях почтовые серверы требуют явного указания метода аутентификации. Также крайне важно помнить, что в современных реалиях необходимо использовать пароли приложений, а не основные пароли от почтовых ящиков.
После настройки профиля нам нужно подготовить само письмо. Разберем по шагам, как добавить отправителя, получателя, тему и текст письма. Мы будем использовать объект ИнтернетПочтовоеСообщение.
Посмотрим на пример заполнения данных письма:
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.ИмяОтправителя = "Робот 1С";
Письмо.Отправитель.Адрес = "mymail@yandex.ru";
НовыйПолучатель = Письмо.Получатели.Добавить();
НовыйПолучатель.Адрес = "client@example.com";
НовыйПолучатель.ОтображаемоеИмя = "Уважаемый Клиент";
Письмо.Тема = "Тестовое письмо из 1С";
Текст = Письмо.Тексты.Добавить();
Текст.Текст = "Здравствуйте! Это сообщение сформировано автоматически из системы 1С.";
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
Проанализируем структуру: объект Получатели представляет собой коллекцию. Это означает, что мы можем добавить несколько адресатов, используя метод Добавить(). Если база адресатов велика, может потребоваться дополнительная оптимизация персонализированных рассылок отчетов в БСП. Аналогичным образом работает коллекция Вложения.
Также обратите внимание на тип текста. Если вам требуется сложное форматирование, вместо простого текста рекомендуется использование HTML Редактора NicEdit, что позволит создавать визуально привлекательные письма.
Теперь объединим все части и выполним отправку. Важно помнить, что работа с внешними ресурсами всегда должна быть обернута в блок Попытка ... Исключение. Это позволит избежать аварийного завершения работы программы, если, например, временно отсутствует интернет-соединение или сервер недоступен.
Разберем итоговый программный блок:
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль);
Почта.Послать(Письмо);
Сообщить("Письмо успешно отправлено!");
Исключение
Сообщить("Произошла ошибка при отправке: " + ОписаниеОшибки());
КонецПопытки;
Почта.Отключиться();
Выясним важный нюанс: метод Отключиться() должен вызываться всегда, чтобы корректно завершить сессию с сервером. В идеале его следует поместить в блок КонецПопытки или использовать дополнительную проверку состояния подключения.
Зачастую простого текста недостаточно. Рассмотрим ситуацию, когда нам нужно отправить печатную форму счета в формате PDF — для этого подойдёт автоматизация массовой отправки счетов и УПД. Если вы не хотите реализовывать этот механизм самостоятельно, поможет готовая отправка и получение почтовых сообщений в виде расширения. Однако, если мы пишем код сами, то сначала сохраняем ТабличныйДокумент во временный файл, а затем добавляем его в сообщение.
Проанализируем пример кода:
ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
Письмо.Вложения.Добавить(ИмяФайла, "Счет_на_оплату.pdf");
В данном примере функция ПолучитьИмяВременногоФайла гарантирует уникальность пути, а метод Записать преобразует печатную форму 1С в общедоступный формат. После отправки письма рекомендуется удалить временный файл с диска, используя команду УдалитьФайлы().
Если код выполняется в контексте сервера (например, в регламентном задании), необходимо убедиться, что у пользователя, под которым запущен агент сервера 1С, есть права на работу с сетью и доступ к временным папкам файловой системы. Для длительных операций рассылки рекомендуется использовать фоновые задания с отслеживанием результата выполнения и индикацией прогресса — это решается через автоматизация почтовых рассылок с поддержкой шаблонов.
Подведем итог: использование объектов ИнтернетПочтовыйПрофиль и ИнтернетПочта позволяет гибко настраивать взаимодействие с любыми почтовыми сервисами. Главное — уделять внимание безопасности (SSL/TLS) и всегда обрабатывать возможные ошибки подключения.