Собственный текст содержит &VerificationCode, а имя пользователя и представление приложения необязательны. Учимся проверять шаблон, не генерируя настоящий код восстановления.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеЗадачи. Фрагмент вставьте внутрь ВыполнитьПример() Экспорт и вызовите своей учебной командой.
Во всех задачах Новый НастройкиВосстановленияПароля создаёт собственный объект в памяти. Код не устанавливает дополнительные параметры информационной базы и не запускает восстановление пароля.
Не подставляйте реальные SMTP-пароли, OAuth-токены, адреса сотрудников и рабочие ссылки. example.invalid — учебный адрес, не настроенный почтовый сервер.
Каждый пример выполняйте отдельно. Вывод и свойства проверяются в сообщениях/отладчике; доставки письма, изменения пароля и открытия сайта не будет.
Проект = Новый НастройкиВосстановленияПароля;
Проект.СпособВосстановленияПароля = СпособВосстановленияПароляПользователяИнформационнойБазы.Нет;
Проект.Заголовок = "Учебное восстановление доступа";
Проект.ИмяОтправителя = "Учебная поддержка";
Проект.Отправитель = "support@example.invalid";
Проект.ТекстСообщенияHTML = "<html><body><p>Код: &VerificationCode</p><p>Пользователь: &UserPresentation</p><p>База: &ApplicationPresentation</p></body></html>";
Если СтрНайти(Проект.ТекстСообщенияHTML, "&VerificationCode") = 0 Тогда
ВызватьИсключение "В шаблоне отсутствует обязательный параметр &VerificationCode";
КонецЕсли;
УчебноеИмя = "Ученик <1> & помощник";
БезопасноеИмя = СтрЗаменить(УчебноеИмя, "&", "&");
БезопасноеИмя = СтрЗаменить(БезопасноеИмя, "<", "<");
БезопасноеИмя = СтрЗаменить(БезопасноеИмя, ">", ">");
Предпросмотр = СтрЗаменить(Проект.ТекстСообщенияHTML, "&UserPresentation", БезопасноеИмя);
Предпросмотр = СтрЗаменить(Предпросмотр, "&ApplicationPresentation", "Учебная база");
Сообщить(Проект.Заголовок = "Учебное восстановление доступа");
Сообщить(Проект.ИмяОтправителя = "Учебная поддержка");
Сообщить(Проект.Отправитель = "support@example.invalid");
Сообщить(СтрНайти(Предпросмотр, "&VerificationCode") > 0);
Сообщить(СтрНайти(Предпросмотр, "Ученик <1> & помощник") > 0);
Сообщить(СтрНайти(Предпросмотр, "&UserPresentation") = 0);Разбор по шагам
Создаём конкретные заголовок, имя и адрес отправителя; адрес принадлежит учебному домену.
В шаблоне оставляем точное имя &VerificationCode. Остальные два параметра необязательны и заменяются платформой при настоящем восстановлении.
Предпросмотр — отдельная строка, не фактический отчёт механизма восстановления. Собственное имя для текстового HTML-узла экранируем в порядке &, <, >.
Код подтверждения в предпросмотр не подставляем, пользовательскую настройку не применяем, письмо не отправляем.
Как проверить результат
Шесть сравнений Истина.
Удалите &VerificationCode из начального шаблона: проверка должна остановить пример.
В Предпросмотр остался параметр кода, а символы <1> не превратились в HTML-тег.
Ожидаемый результат
Подготовлен проверяемый учебный шаблон, где обязательный код отличается от необязательных подписей.
На что обратить внимание
Наше экранирование годится только для текста внутри HTML-узла, не для URL, атрибутов, JavaScript или любого HTML-контекста.
Проверка наличия подстроки не является полной проверкой HTML или доказательством доставки.
Если Отправитель пуст, при отправке значение берётся из ПользовательSMTP; здесь адрес задан явно и отправки нет.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.