В процессе разработки часто возникает необходимость автоматизировать отправку уведомлений, отчетов или счетов напрямую из системы 1С. Это может быть как простая рассылка уведомлений пользователям, так и сложная интеграция с бизнес-процессами. Мы подробно разберем, как реализовать этот функционал с помощью встроенных механизмов платформы 1С 8.3, проанализируем основные объекты и методы, а также выясним причины типичных ошибок при настройке защищенного соединения.
Для начала проанализируем, какие инструменты предоставляет нам платформа. Основное взаимодействие происходит через три ключевых объекта:
ИнтернетПочтовыйПрофиль — здесь мы храним настройки сервера (адрес, порт, логин, пароль, протоколы шифрования).ИнтернетПочтовоеСообщение — это сам объект письма, в котором мы указываем отправителя, получателя, тему, текст и добавляем файлы.ИнтернетПочта — «движок», который устанавливает соединение с сервером и выполняет команду отправки.Рассмотрим подробнее процесс подготовки почтового профиля. Это критически важный этап, так как большинство проблем с авторизацией возникает именно из-за неверных параметров. Если вы столкнулись с трудностями, рекомендуем изучить руководство по отладке почтовых соединений.
Разберем по шагам создание профиля для популярных почтовых сервисов (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С работать не будет.
Теперь выясним, как правильно собрать письмо. Нам нужно создать объект ИнтернетПочтовоеСообщение, заполнить данные отправителя и добавить получателей. Разберем ситуацию, когда к письму необходимо прикрепить файл, например, заранее сформированный отчет в формате PDF.
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Отчет по продажам за " + Формат(ТекущаяДата(), "ДЛФ=D");
Письмо.Отправитель.Адрес = "my_email@mail.ru";
Письмо.Отправитель.ОтображаемоеИмя = "Робот 1С";
// Добавляем получателя
НовыйПолучатель = Письмо.Получатели.Добавить();
НовыйПолучатель.Адрес = "manager@company.com";
// Текст письма
Письмо.Тексты.Добавить("Добрый день! Во вложении актуальный отчет.", ТипТекстаПочтовогоСообщения.ПростойТекст);
// Вложение файла
ПутьКФайлу = "C:\Reports\Sales.pdf";
Письмо.Вложения.Добавить(ПутьКФайлу, "Sales_Report.pdf");
Функция Вложения.Добавить() принимает путь к файлу на диске. Если файл находится в памяти (например, как ДвоичныеДанные), его предварительно нужно сохранить во временный файл с помощью метода Записать(), так как объект сообщения ожидает именно путь в файловой системе или объект типа ИнтернетВложение.
После того как профиль настроен, а сообщение сформировано, нам остается вызвать метод отправки. Проанализируем, как это сделать правильно, обернув код в блок Попытка...Исключение, чтобы система не «упала» при отсутствии интернета или недоступности сервера.
Почта = Новый ИнтернетПочта;
Попытка
// Устанавливаем соединение с сервером
Почта.Подключиться(Профиль);
// Отправляем письмо
Почта.Послать(Письмо);
// Обязательно разрываем соединение
Почта.Отключиться();
Сообщить("Письмо успешно отправлено!");
Исключение
// Обработка ошибок соединения или аутентификации
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Ошибка при отправке почты: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
// На всякий случай пытаемся отключиться, если соединение было установлено
Если Почта.Подключен() Тогда
Почта.Отключиться();
КонецЕсли;
КонецПопытки;
Метод Подключиться() инициирует сессию связи. Важно всегда вызывать Отключиться(), чтобы не оставлять «висящих» соединений на почтовом сервере, что может привести к блокировке вашего IP-адреса за избыточную активность. Для более стабильной работы в высоконагруженных системах можно настроить очередь отправки сообщений.
Рассмотрим важный архитектурный момент. В управляемом приложении 1С код отправки почты должен выполняться на сервере. Это связано с тем, что на стороне клиента может не быть доступа к файловой системе сервера или сетевых разрешений для доступа к внешним портам (SMTP 465/587).
Если вы разрабатываете внешнюю обработку, убедитесь, что процедура отправки помечена директивой &НаСервере. Кроме того, проверьте, открыты ли соответствующие порты в брандмауэре вашего сервера приложений 1С. Для добавления такой возможности без внесения изменений в конфигурацию можно использовать расширение для отправки и получения почтовых сообщений.
Если ваша конфигурация построена на базе БСП (как, например, 1С:ERP, УТ 11 или БП 3.0), рекомендуется использовать типовые механизмы. В БСП есть готовый модуль РаботаСЭлектроннойПочтой, который значительно упрощает жизнь. Рассмотрим пример использования БСП для отправки письма:
// Получаем системную учетную запись
УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗапись;
// Структура параметров письма
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Кому", "client@example.com");
ПараметрыПисьма.Вставить("Тема", "Ваш счет");
ПараметрыПисьма.Вставить("Тело", "Здравствуйте! Во вложении ваш счет.");
// Добавление вложений в БСП реализовано через массив структур
Вложения = Новый Массив;
ДанныеФайла = Новый Структура("Представление, Данные", "Invoice.pdf", СформированныйPDF);
Вложения.Добавить(ДанныеФайла);
ПараметрыПисьма.Вставить("Вложения", Вложения);
// Отправка через типовой механизм
РаботаСЭлектроннойПочтой.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма);
Использование БСП предпочтительнее, так как оно автоматически учитывает настройки системной учетной записи, параметры прокси-сервера, ведет логирование отправок и позволяет пользователям настраивать свои учетные записи через интерфейс программы без привлечения программиста для правки кода. Для просмотра и выгрузки текущих параметров подключения можно использовать обработку для получения настроек учетных записей электронной почты.
Резюме: Мы разобрали базовый и продвинутый способы отправки почты. Главное — правильно настроить ИнтернетПочтовыйПрофиль, использовать пароли приложений для безопасности и всегда корректно завершать соединение с сервером через Отключиться(). Следуя этим шагам, вы сможете реализовать надежную систему уведомлений в любой конфигурации 1С.