Как программно изменить настройки SMTP для аутентификации по электронной почте в 1С?

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

Начиная с версии платформы 8.3.27 в «1С:Предприятии» появился встроенный механизм двухфакторной или беспарольной аутентификации пользователей через электронную почту. Для отправки одноразовых кодов подтверждения платформа использует почтовый сервис или собственный SMTP-сервер базы. В конфигураторе параметры подключения задаются в меню Администрирование — Дополнительные настройки аутентификации — Аутентификация через электронную почту. Однако при создании пользовательских панелей администрирования возникает задача настраивать и сохранять параметры SMTP непосредственно в режиме «1С:Предприятие».

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

Анализ механизма и структуры объекта настроек

Для управления параметрами отправки писем в платформе предусмотрен глобальный менеджер ДополнительныеНастройкиАутентификации. Он предоставляет два ключевых метода:

  1. ПолучитьНастройкиАутентификацииЧерезЭлектроннуюПочту() — возвращает объект типа НастройкиАутентификацииЧерезЭлектроннуюПочту с текущей конфигурацией сервера.
  2. УстановитьНастройкиАутентификацииЧерезЭлектроннуюПочту(Настройки) — сохраняет переданный объект настроек в информационной базе.

Посмотрим на типичную ошибку: начинающие разработчики пытаются передать в метод установки отдельные реквизиты или вызвать его без параметров. Метод УстановитьНастройкиАутентификацииЧерезЭлектроннуюПочту() обязательно принимает на вход один параметр — сформированный объект настроек.

Программное чтение и запись параметров SMTP

Рассмотрим базовый пример кода на стороне сервера, в котором мы считываем текущие настройки, меняем параметры подключения к почтовому серверу и сохраняем изменения обратно в базу:


&НаСервере
Процедура ОбновитьПараметрыПочтовогоСервера()
    
    // Получаем текущий объект с настройками
    НастройкиSMTP = ДополнительныеНастройкиАутентификации.ПолучитьНастройкиАутентификацииЧерезЭлектроннуюПочту();
    
    // Задаем новые значения
    НастройкиSMTP.АдресСервераSMTP = "smtp.company.ru";
    НастройкиSMTP.ПортSMTP = 465;
    НастройкиSMTP.ИспользоватьSSL = Истина;
    НастройкиSMTP.ТолькоЗащищеннаяАутентификацияSMTP = Истина;
    НастройкиSMTP.ПользовательSMTP = "auth-robot@company.ru";
    НастройкиSMTP.ПарольSMTP = "СекретныйПароль";
    
    // При необходимости можно отключить стандартный облачный сервис фирмы «1С»
    НастройкиSMTP.ИспользоватьСтандартныйСервисОтправки = Ложь;
    
    // Записываем обновленные настройки в базу
    ДополнительныеНастройкиАутентификации.УстановитьНастройкиАутентификацииЧерезЭлектроннуюПочту(НастройкиSMTP);
    
КонецПроцедуры

Если требуется инициализировать объект с нуля, а не модифицировать существующий, платформа позволяет создать его конструктором Новый НастройкиАутентификацииЧерезЭлектроннуюПочту.

Реализация логики в управляемой форме и нюанс с паролем

Разберем по шагам, как правильно привязать эти методы к реквизитам управляемой формы. В целях безопасности платформа при чтении настроек через ПолучитьНастройкиАутентификацииЧерезЭлектроннуюПочту() не возвращает реальный пароль учетной записи SMTP — свойство ПарольSMTP всегда возвращает пустую строку.

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

Создадим на форме реквизиты: АдресСервераSMTP (Строка), ПортSMTP (Число), ИспользоватьSSL (Булево), ПользовательSMTP (Строка), ПарольSMTP (Строка, признак РежимПароля включен).

Посмотрим на код модуля формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ТекущиеНастройки = ДополнительныеНастройкиАутентификации.ПолучитьНастройкиАутентификацииЧерезЭлектроннуюПочту();
    
    АдресСервераSMTP = ТекущиеНастройки.АдресСервераSMTP;
    ПортSMTP          = ТекущиеНастройки.ПортSMTP;
    ИспользоватьSSL   = ТекущиеНастройки.ИспользоватьSSL;
    ПользовательSMTP  = ТекущиеНастройки.ПользовательSMTP;
    // Пароль намеренно оставляем пустым, чтобы не перезаписать его случайно
    ПарольSMTP        = "";
    
КонецПроцедуры

&НаСервере
Процедура СохранитьНастройкиНаСервере()
    
    Настройки = ДополнительныеНастройкиАутентификации.ПолучитьНастройкиАутентификацииЧерезЭлектроннуюПочту();
    
    Настройки.АдресСервераSMTP = СокрЛП(АдресСервераSMTP);
    Настройки.ПортSMTP         = ПортSMTP;
    Настройки.ИспользоватьSSL  = ИспользоватьSSL;
    Настройки.ПользовательSMTP = СокрЛП(ПользовательSMTP);
    
    // Обновляем пароль только в случае, если пользователь ввел новый
    Если ЗначениеЗаполнено(ПарольSMTP) Тогда
        Настройки.ПарольSMTP = ПарольSMTP;
    КонецЕсли;
    
    // Запрещаем использование внешнего сервиса «1С», используем свой SMTP
    Настройки.ИспользоватьСтандартныйСервисОтправки = Ложь;
    
    ДополнительныеНастройкиАутентификации.УстановитьНастройкиАутентификацииЧерезЭлектроннуюПочту(Настройки);
    
КонецПроцедуры

&НаКлиенте
Процедура КомандаСохранить(Команда)
    СохранитьНастройкиНаСервере();
    ПоказатьОповещениеПользователя("Успешно", , "Параметры аутентификации SMTP обновлены");
КонецПроцедуры

Важные требования и ограничения платформы

Проанализируем технические требования, без соблюдения которых вызовы методов завершатся системными ошибками:

  1. Версия платформы и режим совместимости: Функционал аутентификации через почту поддерживается строго с версии 8.3.27. Если информационная база работает в режиме совместимости с версиями 8.3.26 и ниже, свойство ДополнительныеНастройкиАутентификации будет недоступно.
  2. Права доступа: Для вызова методов чтения и записи объектных настроек у пользователя должна быть назначена роль с правом Администрирование или Администрирование данных. В противном случае платформа выбросит исключение нарушения прав доступа.
  3. Контекст выполнения: Все вызовы должны осуществляться на сервере, в толстом клиенте или во внешнем соединении. На тонком клиенте данные методы недоступны.
  4. Настройка пользователей базы: Для успешного входа пользователя по одноразовому коду у объекта ПользовательИнформационнойБазы должно быть установлено свойство АутентификацияЧерезЭлектроннуюПочту = Истина, а в свойстве АдресЭлектроннойПочты указан уникальный действующий e-mail.
  5. Публикация базы: Если используется веб-клиент, в конфигурационном файле публикации default.vrd в параметрах аутентификации должно быть явно разрешено использование email.

Штатная альтернатива без доработки конфигурации

Если вам требуется изменить параметры SMTP без изменения метаданных конфигурации, создавать собственную форму необязательно. В платформу уже встроен стандартный интерфейс:

Откройте меню «Сервис и настройки» — «Функции для технического специалиста», перейдите в раздел «Стандартные» и выберите обработку «Дополнительные настройки аутентификации». В открывшемся окне доступны все настройки сервера SMTP, флагов SSL и алфавита генерации проверочных кодов.

← На главную