Начиная с версии платформы 8.3.27 в «1С:Предприятии» появился встроенный механизм двухфакторной или беспарольной аутентификации пользователей через электронную почту. Для отправки одноразовых кодов подтверждения платформа использует почтовый сервис или собственный SMTP-сервер базы. В конфигураторе параметры подключения задаются в меню Администрирование — Дополнительные настройки аутентификации — Аутентификация через электронную почту. Однако при создании пользовательских панелей администрирования возникает задача настраивать и сохранять параметры SMTP непосредственно в режиме «1С:Предприятие».
Разберем, как устроен программный интерфейс управления этими параметрами, выясним причину затруднений при сохранении данных и по шагам реализуем форму настройки.
Для управления параметрами отправки писем в платформе предусмотрен глобальный менеджер ДополнительныеНастройкиАутентификации. Он предоставляет два ключевых метода:
ПолучитьНастройкиАутентификацииЧерезЭлектроннуюПочту() — возвращает объект типа НастройкиАутентификацииЧерезЭлектроннуюПочту с текущей конфигурацией сервера.УстановитьНастройкиАутентификацииЧерезЭлектроннуюПочту(Настройки) — сохраняет переданный объект настроек в информационной базе.Посмотрим на типичную ошибку: начинающие разработчики пытаются передать в метод установки отдельные реквизиты или вызвать его без параметров. Метод УстановитьНастройкиАутентификацииЧерезЭлектроннуюПочту() обязательно принимает на вход один параметр — сформированный объект настроек.
Рассмотрим базовый пример кода на стороне сервера, в котором мы считываем текущие настройки, меняем параметры подключения к почтовому серверу и сохраняем изменения обратно в базу:
&НаСервере
Процедура ОбновитьПараметрыПочтовогоСервера()
// Получаем текущий объект с настройками
Настройки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 обновлены");
КонецПроцедуры
Проанализируем технические требования, без соблюдения которых вызовы методов завершатся системными ошибками:
ДополнительныеНастройкиАутентификации будет недоступно.Администрирование или Администрирование данных. В противном случае платформа выбросит исключение нарушения прав доступа.ПользовательИнформационнойБазы должно быть установлено свойство АутентификацияЧерезЭлектроннуюПочту = Истина, а в свойстве АдресЭлектроннойПочты указан уникальный действующий e-mail.default.vrd в параметрах аутентификации должно быть явно разрешено использование email.Если вам требуется изменить параметры SMTP без изменения метаданных конфигурации, создавать собственную форму необязательно. В платформу уже встроен стандартный интерфейс:
Откройте меню «Сервис и настройки» — «Функции для технического специалиста», перейдите в раздел «Стандартные» и выберите обработку «Дополнительные настройки аутентификации». В открывшемся окне доступны все настройки сервера SMTP, флагов SSL и алфавита генерации проверочных кодов.