В процессе разработки конфигураций на платформе 1С:Предприятие 8.3 часто возникает задача автоматизации почтовых уведомлений. Это может быть рассылка счетов клиентам, уведомление администратора о критических ошибках или ежедневная отправка отчетов руководству. Для реализации этой задачи в платформе предусмотрен специализированный набор объектов. В данной статье мы разберем по шагам, как правильно настроить почтовый профиль, сформировать сообщение и отправить его, учитывая современные требования безопасности почтовых сервисов.
Прежде чем переходить к написанию кода, проанализируем ситуацию с основными объектами, которые нам понадобятся. В 1С для работы с электронной почтой используются три ключевых класса:
ИнтернетПочтовыйПрофиль — объект, в котором хранятся настройки подключения к серверу (адрес, порт, логин, пароль, параметры шифрования).ИнтернетПочтовоеСообщение — объект, описывающий само письмо (отправитель, получатели, тема, текст, вложения).ИнтернетПочта — объект-менеджер, который осуществляет непосредственное соединение с сервером и отправку подготовленных сообщений.Рассмотрим подробнее процесс создания и заполнения объекта ИнтернетПочтовыйПрофиль. Современные почтовые сервисы, такие как Yandex, Gmail или Mail.ru, требуют обязательного использования защищенного соединения (SSL/TLS). Если не указать соответствующие параметры, сервер отклонит попытку подключения.
Разберем на примере код для инициализации профиля:
Профиль = Новый ИнтернетПочтовыйПрофиль;
// Настройки SMTP сервера
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 465; // Стандартный порт для SSL
Профиль.ПользовательSMTP = "my-mail@yandex.ru";
Профиль.ПарольSMTP = "ваш_пароль_приложения";
// Настройки безопасности
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоСЗащищеннымСоединениемSMTP = Истина;
Профиль.СпособSMTPАутентификации = СпособSMTPАутентификации.ПовторениеСеанса;
Профиль.ВремяОжидания = 60; // Таймаут в секундах
Важный момент: большинство сервисов сейчас требуют использования специальных "паролей приложений", которые генерируются в личном кабинете почты. Обычный пароль от почтового ящика в коде 1С работать не будет.
После того как профиль настроен, нам необходимо подготовить само письмо. Объект ИнтернетПочтовоеСообщение позволяет задать не только текст, но и формат письма (простой текст или HTML).
Посмотрим на пример создания сообщения с вложением:
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.ИмяОтправителя = "Робот 1С";
Письмо.Отправитель.Адрес = "my-mail@yandex.ru";
// Добавление получателя
Получатель = Письмо.Получатели.Добавить();
Получатель.Адрес = "client@example.com";
Получатель.ОтображаемоеИмя = "Уважаемый Клиент";
Письмо.Тема = "Счет на оплату №123 от " + ТекущаяДата();
// Формирование текста письма (HTML формат)
ТекстПисьма = Письмо.Тексты.Добавить();
ТекстПисьма.Текст = "<html><body><h1>Здравствуйте!</h1><p>Во вложении ваш счет.</p></body></html>";
ТекстПисьма.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;
// Добавление вложения
ПутьКФайлу = "C:\Reports\Invoice123.pdf";
Письмо.Вложения.Добавить(ПутьКФайлу, "Счет_на_оплату.pdf");
При использовании метода Вложения.Добавить(), 1С автоматически считывает двоичные данные файла и упаковывает их в письмо в формате MIME.
Теперь выясним причину, по которой отправка может завершиться неудачей, и как этого избежать. Весь процесс отправки должен быть заключен в блок Попытка...Исключение, так как сетевые ошибки или блокировки антивирусов — частое явление.
Почта = Новый ИнтернетПочта;
Попытка
// Подключаемся к серверу
Почта.Подключиться(Профиль);
// Отправляем массив сообщений (можно отправить несколько за раз)
МассивПисем = Новый Массив;
МассивПисем.Добавить(Письмо);
Почта.Отправить(МассивПисем);
// Обязательно отключаемся
Почта.Отключиться();
Сообщить("Письмо успешно отправлено!");
Исключение
// В случае ошибки выводим описание
ОписаниеОшибки = ОписаниеОшибки();
Почта.Отключиться();
Сообщить("Ошибка при отправке: " + ОписаниеОшибки);
КонецПопытки;
Проанализируем ситуацию с точки зрения пользователя. Если отправка письма выполняется непосредственно в коде формы, интерфейс 1С может "зависнуть" на несколько секунд, пока устанавливается соединение с SMTP-сервером. Чтобы этого избежать, мы рекомендуем выносить процедуру отправки в ФоновыеЗадания.
Алгоритм действий следующий:
ФоновыеЗадания.Выполнить().Это позволит пользователю продолжать работу с программой, в то время как 1С будет обмениваться данными с почтовым сервером в фоновом потоке.
Иногда возникают проблемы с отображением русских символов в теме письма или теле сообщения. Для решения этой проблемы рассмотрим подробнее свойства кодировки в объекте ИнтернетПочтовоеСообщение. По умолчанию 1С использует UTF-8, что является стандартом, но в старых системах может потребоваться явное указание:
Письмо.Кодировка = "windows-1251";
Также стоит обратить внимание на свойство ОбработатьТексты(). Если вы формируете сложное HTML-письмо с картинками внутри, этот метод поможет корректно преобразовать пути к изображениям в CID-ссылки, чтобы картинки отображались прямо в теле письма у получателя.
Мы рассмотрели полный цикл настройки почтовой системы внутри 1С. Ключевые правила успеха: правильная настройка ИнтернетПочтовыйПрофиль с учетом требований SSL/TLS, использование паролей приложений и обязательная обработка исключительных ситуаций. Применяя эти знания, вы сможете создать надежный механизм коммуникации вашей системы 1С с внешним миром.