Как настроить отправку электронных писем из 1С:Предприятие 8.3 (управляемые формы) через SMTP с авторизацией?

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

При работе с 1С:Предприятие часто возникает необходимость отправлять электронные письма напрямую из системы. Это может быть рассылка отчетов, уведомлений, счетов или других документов. В этой статье мы подробно рассмотрим, как реализовать отправку почты из 1С версии 8.3 с использованием управляемых форм через внешний SMTP-сервер, который требует авторизации и использования защищенного соединения (SSL/TLS).

Мы вместе разберем необходимые объекты 1С, их свойства и методы, а также покажем примеры кода и общие подходы к обработке возможных ошибок.

Основы отправки почты в 1С: ключевые объекты

Для отправки электронных писем в 1С мы будем использовать два основных объекта: ИнтернетПочта и ИнтернетПочтовоеСообщение. Объект ИнтернетПочта отвечает за подключение к SMTP-серверу и непосредственно за отправку письма, а ИнтернетПочтовоеСообщение — за формирование содержимого самого письма (получатели, тема, текст, вложения).

  1. Создание объекта ИнтернетПочта: Этот объект позволяет нам настроить параметры подключения к почтовому серверу.
  2. Настройка параметров SMTP: Мы укажем адрес сервера, порт, логин и пароль для авторизации.
  3. Создание объекта ИнтернетПочтовоеСообщение: Здесь мы формируем само письмо.
  4. Формирование письма: Добавляем получателей, задаем тему, текст, при необходимости — вложения.
  5. Отправка письма: Используем метод объекта ИнтернетПочта для отправки подготовленного сообщения.
  6. Обработка ошибок: Важный этап, позволяющий сделать отправку более надежной.

Шаг 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). Обычный пароль может не подойти из соображений безопасности.

Шаг 2: Установление защищенного соединения

После настройки параметров SMTP, мы должны установить защищенное соединение с сервером. Для этого в 1С предусмотрен метод НачатьSSLСоединение() объекта ИнтернетПочта. Этот шаг особенно важен для большинства современных почтовых серверов.


// ... (Код из Шага 1)

// Устанавливаем защищенное SSL-соединение
Почта.НачатьSSLСоединение();

Если соединение не будет установлено или возникнет ошибка на этом этапе, дальнейшая отправка письма будет невозможна. Ошибки могут быть связаны с неправильным портом, отсутствием SSL-сертификатов на сервере 1С (редко, но бывает), или блокировкой исходящих соединений фаерволом или прокси-сервером.

Шаг 3: Формирование почтового сообщения

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


// Создаем новый объект для формирования почтового сообщения
Перем Сообщение;
Сообщение = Новый ИнтернетПочтовоеСообщение;

// Добавляем получателей. Можно добавить несколько получателей.
// Также можно использовать Сообщение.Копии.Добавить() и Сообщение.СкрытыеКопии.Добавить()
Сообщение.Получатели.Добавить("получатель@example.com"); 
// Если нужен ответ на другой адрес
// Сообщение.АдресДляОтвета = "ответить_сюда@example.com"; 

// Указываем отправителя
Сообщение.Отправитель = Новый ИнтернетПочтовыйАдрес(Почта.Пользователь, "Моя компания");

// Задаем тему письма
Сообщение.Тема = "Тестовое письмо из 1С:Предприятие";

// Формируем текст письма
Сообщение.Текст = "
    |Здравствуйте!
    |
    |Это автоматическое тестовое письмо, отправленное из системы 1С:Предприятие.
    |
    |С уважением,
    |Отдел автоматизации
    |";

// Если нужно добавить вложения:
// Например, прикрепить файл из временного хранилища или с диска
// Вложение = Новый ИнтернетПочтовоеВложение("C:\Путь\К\Файлу\Отчет.pdf");
// Сообщение.Вложения.Добавить(Вложение);

Мы можем добавлять несколько получателей, копии, скрытые копии. Также есть возможность указать адрес для ответа, который может отличаться от фактического отправителя. Если требуется прикрепить файлы, используйте объект ИнтернетПочтовоеВложение.

Шаг 4: Отправка письма и завершение соединения

Когда сообщение полностью сформировано, мы используем метод Послать() объекта ИнтернетПочта для его отправки. После отправки, а в случае ошибки — после попытки отправки, крайне важно корректно завершить соединение с SMTP-сервером методом ЗакончитьСоединение(). Это освобождает ресурсы и обеспечивает стабильную работу.


// ... (Код из Шага 3)

Попытка
    // Отправляем сформированное почтовое сообщение
    Почта.Послать(Сообщение);
    Сообщить("Письмо успешно отправлено!");

Исключение
    // Обработка ошибок, если отправка не удалась
    Сообщить("Ошибка при отправке письма: " + ОписаниеОшибки());
    // Дополнительная детализация ошибки, если нужно:
    // Сообщить("Подробности ошибки: " + Почта.ПоследняяОшибка);

КонецПопытки;

// Обязательно завершаем соединение с SMTP-сервером, независимо от результата отправки
Если Почта <> Неопределено Тогда
    Почта.ЗакончитьСоединение();
КонецЕсли;

Мы обернули отправку письма в блок Попытка...Исключение. Это позволяет нам перехватывать ошибки, которые могут возникнуть в процессе отправки (например, проблемы с авторизацией, недоступность сервера, ошибки формирования письма), и выводить их пользователю или записывать в лог. Это делает ваш код более надежным и отказоустойчивым.

Обработка типичных проблем и ошибок

При настройке отправки почты из 1С могут возникнуть различные сложности. Давайте рассмотрим наиболее частые из них и способы их решения:

  1. Ошибка аутентификации (Authentication failed):
    • Неправильный логин/пароль: Проверьте правильность введенных учетных данных. Убедитесь, что используете полный адрес электронной почты в качестве логина.
    • Пароль приложения: Для многих современных почтовых сервисов (Google, Yandex, Mail.ru) требуется создать специальный "пароль для приложений" в настройках безопасности вашего аккаунта. Обычный пароль от почты может не подойти. Мы рекомендуем всегда проверять этот момент.
    • Разрешение сторонних приложений: Убедитесь, что в настройках вашей почты разрешено использование сторонних приложений для доступа к аккаунту.
  2. Проблемы с подключением (Connection refused, Timeout):
    • Неправильный адрес или порт SMTP-сервера: Перепроверьте значения АдресСервераSMTP и ПортSMTP. Попробуйте разные варианты портов (465 для SSL, 587 для TLS/STARTTLS).
    • Блокировка фаерволом или антивирусом: Убедитесь, что фаервол на сервере 1С или в вашей локальной сети не блокирует исходящие соединения на порты 465 или 587.
    • Прокси-сервер: Если ваша сеть использует прокси-сервер для доступа в интернет, убедитесь, что 1С настроена на его использование. В объекте ИнтернетПочта есть свойства для настройки прокси-сервера (ПроксиСервер, ПортПрокси, ПользовательПрокси, ПарольПрокси).
    • Проблемы с SSL-сертификатами: В редких случаях могут возникать проблемы с SSL-сертификатами на стороне сервера 1С. Убедитесь, что операционная система имеет актуальные корневые сертификаты.
  3. Метод НачатьSSLСоединение() не работает или выдает ошибку:
    • Это может быть связано с устаревшей версией платформы 1С или особенностями SMTP-сервера. Иногда вместо Начать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-сервера и обработке возможных ошибок для обеспечения стабильной работы.

← На главную