Отправка уведомлений, счетов, отчетов и прайс-листов по электронной почте — одна из самых частых задач при автоматизации бизнес-процессов. В платформе 1С:Предприятие для этих целей предусмотрен мощный встроенный механизм. В этой статье мы подробно разберем, как правильно настроить отправку писем, учтем современные требования безопасности (SSL) и научимся прикреплять файлы к письмам.
Для решения задачи мы будем использовать объект встроенного языка ИнтернетПочта. Процесс можно разделить на несколько логических этапов: настройка профиля подключения, формирование самого письма (с темой, текстом и вложениями), установка соединения и непосредственно отправка. Рассмотрим каждый этап детально, создавая универсальный алгоритм, который вы сможете использовать в своих конфигурациях.
Первым делом нам необходимо сказать системе, через какой почтовый сервер мы будем отправлять данные. Для этого в 1С используется объект ИнтернетПочтовыйПрофиль. Это "паспорт" нашего подключения, где хранятся адрес сервера, порты, логины и пароли.
При заполнении профиля крайне важно учитывать требования вашего почтового провайдера (Яндекс, Mail.ru, Gmail или корпоративный сервер Exchange). Проанализируем основные параметры, которые нам понадобятся.
Создадим функцию, которая будет возвращать настроенный профиль. Обратите внимание, что для современных почтовых сервисов использование защищенного соединения (SSL) является обязательным.
Функция ПолучитьПрофильПочты()
Профиль = Новый ИнтернетПочтовыйПрофиль;
// Адрес SMTP-сервера (например, smtp.yandex.ru, smtp.mail.ru)
Профиль.АдресСервераSMTP = "smtp.example.com";
// Порт SMTP. Обычно 465 (для SSL) или 587 (для TLS)
// Для незащищенного соединения (редко) используется 25
Профиль.ПортSMTP = 465;
// Пользователь и Пароль
// ВАЖНО: Для публичных сервисов (Яндекс, Google) здесь часто нужен
// не основной пароль от ящика, а "Пароль приложений"
Профиль.ПользовательSMTP = "robot@example.com";
Профиль.ПарольSMTP = "YourSecretAppPassword";
// Настройки безопасности
// Если используем порт 465, то ТолькоЗащищенное
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Истина;
// Время ожидания в секундах (чтобы не зависало при плохой связи)
Профиль.Таймаут = 30;
Возврат Профиль;
КонецФункции
Давайте разберем важный нюанс. Если вы используете Яндекс.Почту или Gmail, обычный пароль от входа в веб-интерфейс скорее всего не подойдет. Почтовые сервисы блокируют доступ "небезопасным приложениям" (которыми они считают 1С). Вам необходимо зайти в настройки безопасности своего почтового аккаунта в браузере и сгенерировать специальный Пароль приложений. Именно его нужно указывать в свойстве ПарольSMTP.
Часто в вопросах на форумах возникает проблема с тем, как правильно передать файл. Автор темы спрашивал про PDF-файл, но механизм универсален для любого типа файлов (Excel, Word, картинки). Для работы с файлами в контексте письма нам не нужно читать их в ДвоичныеДанные вручную перед добавлением, объект письма сделает это сам, если мы укажем путь.
Предположим, у нас есть путь к файлу на диске. Рассмотрим код подготовки вложения:
// Путь к файлу, который мы хотим отправить
ПутьКФайлу = "C:\Reports\Otchet.pdf";
// Проверим, существует ли файл, чтобы избежать ошибок
ФайлНаДиске = Новый Файл(ПутьКФайлу);
Если НЕ ФайлНаДиске.Существует() Тогда
Сообщить("Файл вложения не найден!");
Возврат;
КонецЕсли;
Теперь соберем само сообщение. Для этого используется объект ИнтернетПочтовоеСообщение. Этот объект представляет собой контейнер, в который мы сложим тему, текст, получателей и наши файлы.
Обратите внимание на работу с текстом письма. Мы можем отправлять как простой текст, так и форматированный HTML (с выделением цветом, шрифтами и т.д.). Рассмотрим пример, где мы заполняем оба варианта для совместимости.
Функция СформироватьПисьмо(ПутьКФайлу)
Письмо = Новый ИнтернетПочтовоеСообщение;
// От кого (Отображаемое имя + адрес)
Письмо.Отправитель.Адрес = "robot@example.com";
Письмо.Отправитель.ОтображаемоеИмя = "Робот 1С";
// Кому (можно добавить несколько получателей)
Початель = Письмо.Получатели.Добавить("client@client-company.com");
Початель.ОтображаемоеИмя = "Иван Иванович";
// Тема письма
Письмо.Тема = "Отчет о продажах за месяц";
// Текст письма
ТекстПисьма = "Добрый день! Во вложении ваш отчет.";
// Добавляем простой текст
Письмо.Тексты.Добавить(ТекстПисьма, ТипТекстаПочтовогоСообщения.ПростойТекст);
// Если нужно HTML оформление, можно добавить и его:
// Письмо.Тексты.Добавить("Добрый день!...", ТипТекстаПочтовогоСообщения.HTML);
// САМОЕ ВАЖНОЕ: Добавление вложения
// Метод Добавить принимает путь к файлу
Вложение = Письмо.Вложения.Добавить(ПутьКФайлу);
// Можно задать имя, которое увидит получатель (если оно отличается от имени файла на диске)
Вложение.Имя = "Отчет_Май_2024.pdf";
Возврат Письмо;
КонецФункции
Финальный этап — это соединение с сервером и отправка. Это критический момент, где чаще всего возникают ошибки (нет интернета, неправильный пароль, порт закрыт фаерволом). Поэтому мы обязательно должны обернуть наш код в конструкцию Попытка ... Исключение.
Посмотрим на итоговый алгоритм отправки. Мы используем метод Послать объекта ИнтернетПочта.
Процедура ОтправитьПисьмоСВложением()
// 1. Готовим данные
Профиль = ПолучитьПрофильПочты();
ПутьКФайлу = "C:\Reports\Otchet.pdf";
Письмо = СформироватьПисьмо(ПутьКФайлу);
// 2. Создаем объект для связи
Почта = Новый ИнтернетПочта;
Попытка
// Подключаемся к серверу
// Третий параметр (здесь не указан явно) отвечает за режим подключения
Почта.Подключиться(Профиль);
// Отправляем
Почта.Послать(Письмо);
Сообщить("Письмо успешно отправлено!");
Исключение
// Логируем ошибку подробно
Сообщить("Не удалось отправить письмо: " + ОписаниеОшибки());
// Здесь можно добавить запись в ЖурналРегистрации
КонецПопытки;
// 3. Важно: отключаемся от сервера в любом случае
Почта.Отключиться();
КонецПроцедуры
Давайте проанализируем основные причины, почему код может не работать, основываясь на опыте сообщества:
cacert.pem в каталоге bin платформы, но для популярных почтовиков это обычно не требуется при правильных настройках профиля (порт 465 + SSL).1cv8.exe или rphost.exe (если код выполняется на сервере) по почтовым портам. Убедитесь, что порты 465 и 587 открыты.Используя этот подход, вы сможете надежно реализовать рассылку документов и отчетов из вашей конфигурации 1С.