Автоматизация бизнес-процессов в современной компании невозможна без настройки обмена данными с внешним миром. Одной из самых востребованных задач является отправка уведомлений, счетов и отчетов контрагентам прямо из учетной системы. Платформа 1С:Предприятие 8 предоставляет мощный встроенный механизм для работы с электронной почтой, который не требует установки сторонних библиотек или сложных серверных надстроек.
В этой статье мы детально разберем, как программно реализовать отправку писем, используя объекты метаданных ПочтовыйПрофиль и ИнтернетПочтовыйПрофиль. Вы узнаете о нюансах настройки подключения к SMTP-серверам, особенностях аутентификации и методах формирования тела сообщения в формате HTML или простого текста. Правильная реализация этого функционала позволит исключить человеческий фактор при рассылке документов.
Рассмотрим два основных подхода: использование встроенных средств платформы для работы через почтовый клиент Outlook и прямой метод отправки через протокол SMTP. Второй вариант является более предпочтительным для серверных конфигураций, так как не требует наличия установленного почтового клиента на машине пользователя или сервера 1С.
Настройка почтового профиля для отправки
Перед тем как писать код, необходимо корректно определить параметры подключения. В 1С за это отвечает объект ПочтовыйПрофиль. Он служит контейнером для всех настроек: адреса сервера, порта, логина и пароля. Ошибки на этом этапе приводят к тому, что письмо просто не уходит, а система выдает исключение о невозможности соединения.
Для создания профиля программно используется конструктор объекта. Вам нужно указать имя профиля, которое будет использоваться в дальнейшем, тип подключения и адрес SMTP-сервера. Современные почтовые сервисы, такие как Gmail, Яндекс или Mail.ru, требуют использования защищенного соединения SSL/TLS, что также настраивается в свойствах профиля.
⚠️ Внимание: При использовании Gmail или Office 365 стандартный пароль от почты может не подойти. Часто требуется создание специального "пароля приложений" в настройках безопасности аккаунта провайдера.
Важно правильно выбрать метод шифрования. Большинство современных провайдеров поддерживают STARTTLS на порту 587 или прямое SSL-соединение на порту 465. Неправильный выбор порта или типа шифрования приведет к таймауту соединения. Ниже приведен пример создания такого профиля в коде:
ПочтовыйПрофиль = Новый ПочтовыйПрофиль;
ПочтовыйПрофиль.ИмяПрофиля = "ОсновнойSMTP";
ПочтовыйПрофиль.АдресSMTPСервера = "smtp.yandex.ru";
ПочтовыйПрофиль.ПортSMTPСервера = 465;
ПочтовыйПрофиль.ИспользоватьSSL = Истина;
ПочтовыйПрофиль.ПользовательSMTP = "user@yandex.ru";
ПочтовыйПрофиль.ПарольSMTP = "SecretPassword123";
Формирование тела письма и вложений
После настройки профиля следующим шагом является создание самого сообщения. Для этих целей в платформе предусмотрен объект ИнтернетПочтовоеСообщение. Он позволяет гибко управлять заголовками, содержимым и прикрепляемыми файлами. Вы можете формировать как простой текст, так и богатое HTML-форматирование с картинками и таблицами.
Особое внимание стоит уделить кодировке текста. Для корректного отображения кириллицы в большинстве почтовых клиентов рекомендуется использовать кодировку UTF-8. Если вы отправляете счета или коммерческие предложения, часто требуется прикрепить файлы, сгенерированные в самой 1С, например, печатные формы документов.
- 📎 Для добавления вложения используйте метод
Вложения.Добавить(), передавая туда имя файла и двоичные данные. - 📝 Свойство
Текстотвечает за основное содержание, аТекстHTML— за разметку. - 📧 Поля
Получатели,КопияиСкрытаяКопиязаполняются строками через запятую или объектом коллекции адресов.
При работе с вложениями важно помнить о размере письма. Многие почтовые серверы имеют лимит на размер входящего сообщения (обычно 10-25 Мб). Если вы планируете отправлять архивы с большим количеством документов, лучше реализовать логику проверки размера перед отправкой или использовать ссылки на файлообменник вместо самих файлов.
Используйте метод КодировкаТела = ИнтернетКодировка.UTF8 для гарантированного отображения русских символов в любом почтовом клиенте получателя.
Алгоритм отправки через SMTP
Непосредственная отправка письма выполняется методом Отправить() объекта Почта или через статический метод ИнтернетПочта.Отправить(). Этот процесс является синхронным, то есть выполнение кода приостанавливается до момента получения ответа от почтового сервера. Это значит, что интерфейс может "зависнуть" на несколько секунд при медленном соединении.
В серверном варианте исполнения (на тонком клиенте или веб-сервере) рекомендуется оборачивать процедуру отправки в обработку исключений Попытка...Исключение. Это позволит перехватить ошибки сети, неверные пароли или блокировку со стороны провайдера и записать их в журнал регистрации, не прерывая работу пользователя критическим сообщением.
☑️ Чек-лист перед запуском рассылки
Пример кода отправки выглядит следующим образом. Мы создаем объект почтового соединения, передаем ему профиль и вызываем метод отправки. Обратите внимание, что объект сообщения передается по ссылке, и после успешной отправки его свойства могут измениться (например, статус доставки).
Попытка
ИнтернетПочта.Отправить(ПочтовыйПрофиль, ПочтовоеСообщение);
Сообщить("Письмо успешно отправлено!");
Исключение
Сообщить("Ошибка отправки: " + ОписаниеОшибки());
КонецПопытки;
Обработка ошибок и логирование
Надежная система уведомлений должна уметь сообщать о сбоях. Стандартная обработка исключений в 1С позволяет получить текст ошибки, но для глубокой диагностики часто требуется анализ кода ответа SMTP сервера. Серверы могут возвращать коды 5xx (перманентная ошибка) или 4xx (временная проблема), что влияет на стратегию повторных попыток отправки.
Рекомендуется вести журнал отправок в самой базе 1С. Создайте регистр сведений, куда будете записывать дату, получателя, тему письма и результат операции. Это поможет при разборе претензий от контрагентов ("я не получил счет") и позволит отслеживать статистику доставки.
| Код ошибки | Описание | Рекомендуемое действие |
|---|---|---|
| 535 | Authentication failed | Проверить логин/пароль, сменить на пароль приложения |
| 550 | Relay denied / User unknown | Проверить адрес получателя или настройки релея сервера |
| 421 | Service not available | Сервер перегружен, повторить попытку позже |
| 552 | Message size exceeds limit | Уменьшить размер вложений или разбить письмо |
⚠️ Внимание: Не храните пароли от почтовых ящиков в открытом виде в коде конфигурации. Используйте защищенное хранилище данных или запрашивайте пароль у пользователя при первом запуске.
Отправка через Outlook (COM-соединение)
Альтернативный способ отправки — использование установленного на компьютере клиента Microsoft Outlook через COM-соединение. Этот метод удобен для рабочих мест пользователей, где Outlook уже настроен и авторизован. В этом случае 1С выступает лишь как инициатор отправки, а всю техническую работу берет на себя почтовый клиент.
Для реализации этого подхода используется объект Outlook.Application. Преимуществом является то, что письмо попадает в папку "Отправленные" Outlook, и пользователь видит его историю. Однако этот метод имеет серьезные ограничения: он не работает на сервере 1С (в фоновых заданиях), требует наличия установленного Office и часто вызывает проблемы с безопасностью (Outlook может выдавать предупреждения о программной отправке).
Почему Outlook может блокировать отправку?
Служба безопасности Outlook (Antivirus API) блокирует программный доступ к адресной книге и отправку писем, если не установлено доверенное дополнение или антивирус не корректно интегрирован. Это защита от вирусов-рассыльщиков.
Если вы все же выбрали этот путь, убедитесь, что в настройках центра управления безопасностью Office разрешен программный доступ. В коде необходимо создать объект приложения, получить пространство имен и сформировать элемент типа MailItem. Заполнение полей аналогично работе с интернет-почтой, но свойства объектов отличаются.
Асинхронная отправка и фоновые задания
При массовой рассылке уведомлений (например, напоминания об оплате для сотен клиентов) синхронная отправка недопустима. Она заблокирует работу базы для всех пользователей на время процесса. Решением является вынесение процедуры отправки в фоновое задание на сервере 1С.
Для этого создается отдельная общая процедура, которая принимает параметры письма (получатель, тема, файл) и выполняет отправку. Эта процедура запускается через метод ЗапуститьФоновоеЗадание. Важно передать в фоновое задание все необходимые данные, так как контекст основного сеанса там будет недоступен.
- 🚀 Фоновые задания выполняются в отдельном потоке, не тормозя интерфейс.
- ⏳ Можно настроить расписание регламентного задания для автоматической рассылки по ночам.
- 🔄 Реализуйте механизм очереди писем, чтобы отправлять их пакетами и не превысить лимиты SMTP сервера.
При работе с фоновыми заданиями критически важно корректно обрабатывать исключения внутри самой фоновой процедуры. Если задание упадет с ошибкой, пользователь об этом не узнает, если не реализована запись в специальный журнал ошибок или отправку уведомления администратору.
Использование фоновых заданий — единственный корректный способ реализации массовой рассылки в 1С, гарантирующий стабильность работы основной базы данных.
Как отправить письмо нескольким получателям в скрытой копии?
Для этого необходимо заполнить свойство СкрытаяКопия объекта ПочтовоеСообщение. Адреса указываются через точку с запятой или запятую в одной строке, либо добавляются в коллекцию адресов. Получатели в поле "Кому" не увидят тех, кто указан в скрытой копии.
Можно ли отправлять письма без указания темы?
Технически да, свойство Тема не является строго обязательным для метода Отправить. Однако такие письма часто попадают в спам-фильтры почтовых сервисов получателя. Рекомендуется всегда задавать осмысленную тему, даже если это просто "Уведомление от системы 1С".
Что делать, если письмо уходит в спам?
Проверьте SPF и DKIM записи домена, с которого идет отправка. Убедитесь, что IP-адрес сервера 1С не находится в черных списках. Также избегайте стоп-слов в тексте письма и чрезмерного количества ссылок или вложений.
Как отправить HTML-письмо с картинками?
В свойство ТекстHTML записывается верстка. Картинки можно вставлять двумя способами: ссылкой на внешний ресурс (не рекомендуется, так как почтовики часто блокируют внешние изображения) или как внедренные вложения (cid). Для внедрения картинке в присваивается ContentID, а в HTML она указывается как <img src="cid:MyImageID">.
Работает ли отправка почты в облачной 1С (1С:Фреш)?
Да, работает, но есть ограничения. Прямое SMTP-соединение поддерживается полностью. Отправка через COM-объект Outlook невозможна, так как на серверах провайдера нет графического интерфейса и установленного Outlook для каждого клиента. Используйте только метод ИнтернетПочта.