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.
Workaround
В качестве обходного решения необходимо:
- Создать скрипт по расписанию /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();
}
})()
- Очистить поле 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();
- Произвести повторный сброс пароля через страницу /reset-password