Как в 1С 8.3 программно отправить письмо с вложением через SMTP?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки часто возникает необходимость автоматизировать отправку уведомлений, отчетов или счетов напрямую из системы 1С. Это может быть как простая рассылка уведомлений пользователям, так и сложная интеграция с бизнес-процессами. Мы подробно разберем, как реализовать этот функционал с помощью встроенных механизмов платформы 1С 8.3, проанализируем основные объекты и методы, а также выясним причины типичных ошибок при настройке защищенного соединения.

Основные объекты для работы с почтой

Для начала проанализируем, какие инструменты предоставляет нам платформа. Основное взаимодействие происходит через три ключевых объекта:

  1. ИнтернетПочтовыйПрофиль — здесь мы храним настройки сервера (адрес, порт, логин, пароль, протоколы шифрования).
  2. ИнтернетПочтовоеСообщение — это сам объект письма, в котором мы указываем отправителя, получателя, тему, текст и добавляем файлы.
  3. ИнтернетПочта — «движок», который устанавливает соединение с сервером и выполняет команду отправки.

Рассмотрим подробнее процесс подготовки почтового профиля. Это критически важный этап, так как большинство проблем с авторизацией возникает именно из-за неверных параметров. Если вы столкнулись с трудностями, рекомендуем изучить руководство по отладке почтовых соединений.

Шаг 1: Настройка почтового профиля (ИнтернетПочтовыйПрофиль)

Разберем по шагам создание профиля для популярных почтовых сервисов (Mail.ru, Gmail, Yandex), которые требуют обязательного использования SSL/TLS. Посмотрим на пример кода, который инициализирует эти настройки:


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "my_email@mail.ru";
Профиль.ПарольSMTP = "my_app_password"; // Важно: используйте пароль приложения!
Профиль.ТолькоЛогинЭкстраполяция = Ложь;

// Настройка защищенного соединения
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоЛогинSMTP = Истина;

Обратите внимание на свойство ИспользоватьSSLSMTP. В современных версиях платформы 8.3 оно позволяет подключаться к серверам по защищенному каналу. Также важно помнить, что современные почтовые сервисы требуют создания специального пароля для внешних приложений, обычный пароль от почтового ящика в коде 1С работать не будет.

Шаг 2: Формирование сообщения и прикрепление файлов

Теперь выясним, как правильно собрать письмо. Нам нужно создать объект ИнтернетПочтовоеСообщение, заполнить данные отправителя и добавить получателей. Разберем ситуацию, когда к письму необходимо прикрепить файл, например, заранее сформированный отчет в формате PDF.


Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Отчет по продажам за " + Формат(ТекущаяДата(), "ДЛФ=D");
Письмо.Отправитель.Адрес = "my_email@mail.ru";
Письмо.Отправитель.ОтображаемоеИмя = "Робот 1С";

// Добавляем получателя
НовыйПолучатель = Письмо.Получатели.Добавить();
НовыйПолучатель.Адрес = "manager@company.com";

// Текст письма
Письмо.Тексты.Добавить("Добрый день! Во вложении актуальный отчет.", ТипТекстаПочтовогоСообщения.ПростойТекст);

// Вложение файла
ПутьКФайлу = "C:\Reports\Sales.pdf";
Письмо.Вложения.Добавить(ПутьКФайлу, "Sales_Report.pdf");

Функция Вложения.Добавить() принимает путь к файлу на диске. Если файл находится в памяти (например, как ДвоичныеДанные), его предварительно нужно сохранить во временный файл с помощью метода Записать(), так как объект сообщения ожидает именно путь в файловой системе или объект типа ИнтернетВложение.

Шаг 3: Отправка письма через объект ИнтернетПочта

После того как профиль настроен, а сообщение сформировано, нам остается вызвать метод отправки. Проанализируем, как это сделать правильно, обернув код в блок Попытка...Исключение, чтобы система не «упала» при отсутствии интернета или недоступности сервера.


Почта = Новый ИнтернетПочта;

Попытка
    // Устанавливаем соединение с сервером
    Почта.Подключиться(Профиль);
    
    // Отправляем письмо
    Почта.Послать(Письмо);
    
    // Обязательно разрываем соединение
    Почта.Отключиться();
    
    Сообщить("Письмо успешно отправлено!");
Исключение
    // Обработка ошибок соединения или аутентификации
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка при отправке почты: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
    
    // На всякий случай пытаемся отключиться, если соединение было установлено
    Если Почта.Подключен() Тогда
        Почта.Отключиться();
    КонецЕсли;
КонецПопытки;

Метод Подключиться() инициирует сессию связи. Важно всегда вызывать Отключиться(), чтобы не оставлять «висящих» соединений на почтовом сервере, что может привести к блокировке вашего IP-адреса за избыточную активность. Для более стабильной работы в высоконагруженных системах можно настроить очередь отправки сообщений.

Нюансы выполнения на сервере и клиенте

Рассмотрим важный архитектурный момент. В управляемом приложении 1С код отправки почты должен выполняться на сервере. Это связано с тем, что на стороне клиента может не быть доступа к файловой системе сервера или сетевых разрешений для доступа к внешним портам (SMTP 465/587).

Если вы разрабатываете внешнюю обработку, убедитесь, что процедура отправки помечена директивой &НаСервере. Кроме того, проверьте, открыты ли соответствующие порты в брандмауэре вашего сервера приложений 1С. Для добавления такой возможности без внесения изменений в конфигурацию можно использовать расширение для отправки и получения почтовых сообщений.

Использование Библиотеки стандартных подсистем (БСП)

Если ваша конфигурация построена на базе БСП (как, например, 1С:ERP, УТ 11 или БП 3.0), рекомендуется использовать типовые механизмы. В БСП есть готовый модуль РаботаСЭлектроннойПочтой, который значительно упрощает жизнь. Рассмотрим пример использования БСП для отправки письма:


// Получаем системную учетную запись
УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗапись;

// Структура параметров письма
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Кому", "client@example.com");
ПараметрыПисьма.Вставить("Тема", "Ваш счет");
ПараметрыПисьма.Вставить("Тело", "Здравствуйте! Во вложении ваш счет.");

// Добавление вложений в БСП реализовано через массив структур
Вложения = Новый Массив;
ДанныеФайла = Новый Структура("Представление, Данные", "Invoice.pdf", СформированныйPDF);
Вложения.Добавить(ДанныеФайла);
ПараметрыПисьма.Вставить("Вложения", Вложения);

// Отправка через типовой механизм
РаботаСЭлектроннойПочтой.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма);

Использование БСП предпочтительнее, так как оно автоматически учитывает настройки системной учетной записи, параметры прокси-сервера, ведет логирование отправок и позволяет пользователям настраивать свои учетные записи через интерфейс программы без привлечения программиста для правки кода. Для просмотра и выгрузки текущих параметров подключения можно использовать обработку для получения настроек учетных записей электронной почты.

Резюме: Мы разобрали базовый и продвинутый способы отправки почты. Главное — правильно настроить ИнтернетПочтовыйПрофиль, использовать пароли приложений для безопасности и всегда корректно завершать соединение с сервером через Отключиться(). Следуя этим шагам, вы сможете реализовать надежную систему уведомлений в любой конфигурации 1С.

← На главную