При работе с 1С:Предприятие часто возникает необходимость отправлять электронные письма напрямую из системы. Это может быть рассылка отчетов, уведомлений, счетов или других документов. В этой статье мы подробно рассмотрим, как реализовать отправку почты из 1С версии 8.3 с использованием управляемых форм через внешний SMTP-сервер, который требует авторизации и использования защищенного соединения (SSL/TLS).
Мы вместе разберем необходимые объекты 1С, их свойства и методы, а также покажем примеры кода и общие подходы к обработке возможных ошибок.
Для отправки электронных писем в 1С мы будем использовать два основных объекта: ИнтернетПочта и ИнтернетПочтовоеСообщение. Объект ИнтернетПочта отвечает за подключение к SMTP-серверу и непосредственно за отправку письма, а ИнтернетПочтовоеСообщение — за формирование содержимого самого письма (получатели, тема, текст, вложения).
ИнтернетПочта: Этот объект позволяет нам настроить параметры подключения к почтовому серверу.ИнтернетПочтовоеСообщение: Здесь мы формируем само письмо.ИнтернетПочта для отправки подготовленного сообщения.Первым делом нам необходимо создать экземпляр объекта ИнтернетПочта и задать ему все необходимые параметры для подключения к внешнему SMTP-серверу. Рассмотрим это на примере использования распространенных почтовых сервисов, таких как Yandex или Mail.ru, которые требуют SSL-шифрования и авторизации.
Мы зададим адрес сервера, порт, укажем, что нужно использовать SSL, а также предоставим учетные данные (логин и пароль).
// Создаем новый объект для работы с электронной почтой
Перем Почта;
Почта = Новый ИнтернетПочта;
// Настраиваем параметры SMTP-сервера
// Пример для Yandex:
Почта.АдресСервераSMTP = "smtp.yandex.ru";
Почта.ПортSMTP = 465; // Или 587, в зависимости от настроек сервера и типа шифрования
Почта.ИспользоватьSSL = Истина; // Обязательно для защищенного соединения
// Учетные данные для авторизации на SMTP-сервере
// Вместо "мой_логин@yandex.ru" укажите ваш полный адрес электронной почты
Почта.Пользователь = "мой_логин@yandex.ru";
// Вместо "мой_пароль" укажите пароль для приложения или обычный пароль от почты.
// Для некоторых сервисов (например, Google, Yandex) может потребоваться
// сгенерировать специальный пароль для сторонних приложений.
Почта.Пароль = "мой_пароль";
Важно: убедитесь, что указанный ПортSMTP соответствует типу используемого шифрования. Чаще всего для SSL используется порт 465, а для TLS (STARTTLS) — 587. Также критически важно, чтобы в настройках вашего почтового сервиса было разрешено использование сторонних приложений или сгенерирован специальный "пароль приложения" (например, в Google или Yandex). Обычный пароль может не подойти из соображений безопасности.
После настройки параметров SMTP, мы должны установить защищенное соединение с сервером. Для этого в 1С предусмотрен метод НачатьSSLСоединение() объекта ИнтернетПочта. Этот шаг особенно важен для большинства современных почтовых серверов.
// ... (Код из Шага 1)
// Устанавливаем защищенное SSL-соединение
Почта.НачатьSSLСоединение();
Если соединение не будет установлено или возникнет ошибка на этом этапе, дальнейшая отправка письма будет невозможна. Ошибки могут быть связаны с неправильным портом, отсутствием SSL-сертификатов на сервере 1С (редко, но бывает), или блокировкой исходящих соединений фаерволом или прокси-сервером.
Теперь, когда у нас есть настроенное подключение, мы можем создать само электронное письмо. Для этого мы используем объект ИнтернетПочтовоеСообщение. Мы добавим получателей, укажем тему и тело письма.
// Создаем новый объект для формирования почтового сообщения
Перем Сообщение;
Сообщение = Новый ИнтернетПочтовоеСообщение;
// Добавляем получателей. Можно добавить несколько получателей.
// Также можно использовать Сообщение.Копии.Добавить() и Сообщение.СкрытыеКопии.Добавить()
Сообщение.Получатели.Добавить("получатель@example.com");
// Если нужен ответ на другой адрес
// Сообщение.АдресДляОтвета = "ответить_сюда@example.com";
// Указываем отправителя
Сообщение.Отправитель = Новый ИнтернетПочтовыйАдрес(Почта.Пользователь, "Моя компания");
// Задаем тему письма
Сообщение.Тема = "Тестовое письмо из 1С:Предприятие";
// Формируем текст письма
Сообщение.Текст = "
|Здравствуйте!
|
|Это автоматическое тестовое письмо, отправленное из системы 1С:Предприятие.
|
|С уважением,
|Отдел автоматизации
|";
// Если нужно добавить вложения:
// Например, прикрепить файл из временного хранилища или с диска
// Вложение = Новый ИнтернетПочтовоеВложение("C:\Путь\К\Файлу\Отчет.pdf");
// Сообщение.Вложения.Добавить(Вложение);
Мы можем добавлять несколько получателей, копии, скрытые копии. Также есть возможность указать адрес для ответа, который может отличаться от фактического отправителя. Если требуется прикрепить файлы, используйте объект ИнтернетПочтовоеВложение.
Когда сообщение полностью сформировано, мы используем метод Послать() объекта ИнтернетПочта для его отправки. После отправки, а в случае ошибки — после попытки отправки, крайне важно корректно завершить соединение с SMTP-сервером методом ЗакончитьСоединение(). Это освобождает ресурсы и обеспечивает стабильную работу.
// ... (Код из Шага 3)
Попытка
// Отправляем сформированное почтовое сообщение
Почта.Послать(Сообщение);
Сообщить("Письмо успешно отправлено!");
Исключение
// Обработка ошибок, если отправка не удалась
Сообщить("Ошибка при отправке письма: " + ОписаниеОшибки());
// Дополнительная детализация ошибки, если нужно:
// Сообщить("Подробности ошибки: " + Почта.ПоследняяОшибка);
КонецПопытки;
// Обязательно завершаем соединение с SMTP-сервером, независимо от результата отправки
Если Почта <> Неопределено Тогда
Почта.ЗакончитьСоединение();
КонецЕсли;
Мы обернули отправку письма в блок Попытка...Исключение. Это позволяет нам перехватывать ошибки, которые могут возникнуть в процессе отправки (например, проблемы с авторизацией, недоступность сервера, ошибки формирования письма), и выводить их пользователю или записывать в лог. Это делает ваш код более надежным и отказоустойчивым.
При настройке отправки почты из 1С могут возникнуть различные сложности. Давайте рассмотрим наиболее частые из них и способы их решения:
АдресСервераSMTP и ПортSMTP. Попробуйте разные варианты портов (465 для SSL, 587 для TLS/STARTTLS).ИнтернетПочта есть свойства для настройки прокси-сервера (ПроксиСервер, ПортПрокси, ПользовательПрокси, ПарольПрокси).НачатьSSLСоединение() не работает или выдает ошибку:
НачатьSSLСоединение() можно попробовать использовать НачатьЗащищенноеСоединениеSMTP(), если SMTP-сервер поддерживает STARTTLS на порту 587.Давайте сведем все изученные шаги в единый фрагмент кода, который вы можете адаптировать для своих задач. Этот код можно разместить в модуле управляемой формы, в общем модуле (свойство "Клиент" и "Сервер") или в обработке.
// Процедура для отправки электронного письма
// Входящие параметры:
// АдресПолучателя - строка, адрес электронной почты получателя
// ТемаПисьма - строка, тема письма
// ТекстПисьма - строка, тело письма
// ПутьКВложению - необязательный параметр, строка, полный путь к файлу для вложения
//
Процедура ОтправитьПисьмо(АдресПолучателя, ТемаПисьма, ТекстПисьма, ПутьКВложению = "") Экспорт
Перем Почта;
Перем Сообщение;
Попытка
Почта = Новый ИнтернетПочта;
// --- Настройки SMTP-сервера ---
Почта.АдресСервераSMTP = "smtp.yandex.ru";
Почта.ПортSMTP = 465;
Почта.ИспользоватьSSL = Истина;
// --- Учетные данные ---
Почта.Пользователь = "ваш_логин@yandex.ru";
Почта.Пароль = "ваш_пароль_приложения";
// --- Установление защищенного соединения ---
Почта.НачатьSSLСоединение();
// --- Формирование почтового сообщения ---
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Получатели.Добавить(АдресПолучателя);
Сообщение.Отправитель = Новый ИнтернетПочтовыйАдрес(Почта.Пользователь, "Система 1С");
Сообщение.Тема = ТемаПисьма;
Сообщение.Текст = ТекстПисьма;
// Добавляем вложение, если указан путь
Если НЕ ПустаяСтрока(ПутьКВложению) Тогда
Вложение = Новый ИнтернетПочтовоеВложение(ПутьКВложению);
Сообщение.Вложения.Добавить(Вложение);
КонецЕсли;
// --- Отправка письма ---
Почта.Послать(Сообщение);
Сообщить("Письмо успешно отправлено получателю: " + АдресПолучателя);
Исключение
Сообщить("Ошибка при отправке письма: " + ОписаниеОшибки());
// Дополнительная информация об ошибке от объекта Почта
Если Почта <> Неопределено И НЕ ПустаяСтрока(Почта.ПоследняяОшибка) Тогда
Сообщить("Детали ошибки SMTP: " + Почта.ПоследняяОшибка);
КонецЕсли;
КонецПопытки;
// --- Завершение соединения ---
Если Почта <> Неопределено Тогда
Почта.ЗакончитьСоединение();
КонецЕсли;
КонецПроцедуры
// Пример вызова процедуры:
// ОтправитьПисьмо("test@example.com", "Отчет за месяц", "См. вложение с отчетом.", "C:\Temp\Отчет.xlsx");
// ОтправитьПисьмо("info@another.com", "Уведомление", "Просим ознакомиться с новостями.");
Мы рассмотрели все основные аспекты настройки и отправки электронной почты из 1С:Предприятие 8.3 через SMTP-сервер с авторизацией и SSL. Используя эти инструкции и примеры кода, вы сможете успешно реализовать данную функциональность в ваших решениях на 1С. Помните о важности корректной настройки SMTP-сервера и обработке возможных ошибок для обеспечения стабильной работы.