Письма на сброс пароля обработаны со статусом Failed

:speech_balloon: Description
Автоматическое письмо со ссылкой для сброса пароля обрабатывается со статусом Falied.
Сообщение в логах sys_log вида SMTP {account.name}: send email sys_email/{email_id} Check email FROM and TO fields

Причина обработки письма со статусом Failed в том, что в почтовом аккаунте, который используется для отправки отличаются значения в полях User Name и From.
В поле почтового аккаунта User Name указан адрес в down-level формате - DOMAIN\UserName

При создании письма в качестве параметра From всегда используется значение из поля аккаунта User Name. Т.к. в поле аккаунта User Name указано значение, которое не проходит валидацию через системное свойство email.validation.reg_exp , письмо считается невалидным и обрабатывается со статусом Failed.

:heavy_check_mark: Workaround

В качестве обходного решения необходимо:

  1. Создать скрипт по расписанию /record/sys_schedule_script/ со следующими параметрами:
Name: Resend failed password emails
Run as User: Admin User
Run Type: Periodically
Run period: 1 minute
Run Start at: 2022-01-01 00:00:00
Timezone: UTC
Script:
(function executeScheduleScript() {
    let lastTwoMinutesStart = new SimpleDateTime();
    lastTwoMinutesStart.addSeconds(-120);
    const failedEmail = new SimpleRecord('sys_email');
    failedEmail.addQuery('status', 'failed'); // Failed 
    failedEmail.addQuery('body_html', 'like', 'new-password') // with password link
    failedEmail.addQuery('sys_created_at', '>', lastTwoMinutesStart.getValue());
    failedEmail.query();
    if (failedEmail.getRowCount() === 0) {
        return;
    }
    const defaultAccountSend = new SimpleRecord('sys_email_account');
    defaultAccountSend.get(ss.getProperty('default.email.account.send'));
    if (!defaultAccountSend.sys_id) {
        ss.warning(`Default Email Account for Send doesnt found!`);
        return;
    }
    while (failedEmail.next()) {
        failedEmail.email_account = defaultAccountSend.sys_id;
        failedEmail.from = defaultAccountSend.from;
        failedEmail.status = 'ready';
        failedEmail.update();
    }
})()
  1. Очистить поле Password Reset Token для всех пользователей серверным скриптом /record/sys_script
const user = new SimpleRecord('user');
user.addEncodedQuery('(password_reset_tokenISNOTEMPTY)');
user.query();
user.setMultipleValue('password_reset_token', null);
user.updateMultiple();
  1. Произвести повторный сброс пароля через страницу /reset-password