Проблема воспроизводится на старых версиях платформы до Platform 1.17.1 включительно.
Description
Причина прекращения поступления почты заключается в удалении писем на почтовом ящике.
После удаления, нумерация писем на ящике начинается с единицы. Вследствие смещения нумерации новые письма не поступают на экземпляр из-за неуникальности номеров.
Процесс получения писем на экземпляр запускается в начале каждой минуты для каждого активного почтового аккаунта и состоит из следующих шагов:
- Формирование выборки сегодняшних писем (созданных начиная с 00:00 UTC текущего дня) для одного почтового аккаунта.
- Определение уникальности писем. Для каждого сегодняшнего письма выполняется поиск записи sys_email с таким же номером в поле mail_id, созданной текущий почтовый аккаунт. Если такая запись sys_email найдена - письмо считается неуникальным и не поступает на экземпляр.
Переход в список входящей почты через навигатор: System Mailboxes → Incoming Emails
Workaround
После удаления писем на ящике выполнять изменение нумерации Mail ID для ранее созданных писем:
const emailRecord = new SimpleRecord('sys_email');emailRecord.addQuery('direction', 'incoming');emailRecord.addQuery('mail_id', '>', 0);emailRecord.query();
while (emailRecord.next()) { emailRecord.mail_id = emailRecord.mail_id * -1; emailRecord.update();}
Если удаление происходит по расписанию оптимальным решением будет настроить скрипт по расписанию для исправления номеров.
Для перезапуска обработки писем начиная с определённой даты необходимо:
- Обновить созданные до удаления писем на ящике с инвертированием значения mail_id (скрипт указан выше).
- Запустить команду для получения недостающих писем с указание параметра даты. Например,
php yii cron/parse-incoming-mail 'SINCE "7 June 2022"'