Перестала работать почта (получение новых входящих писем)

Проблема воспроизводится на старых версиях платформы до Platform 1.17.1 включительно.

:speech_balloon: Description
Причина прекращения поступления почты заключается в удалении писем на почтовом ящике.
После удаления, нумерация писем на ящике начинается с единицы. Вследствие смещения нумерации новые письма не поступают на экземпляр из-за неуникальности номеров.

Процесс получения писем на экземпляр запускается в начале каждой минуты для каждого активного почтового аккаунта и состоит из следующих шагов:

  1. Формирование выборки сегодняшних писем (созданных начиная с 00:00 UTC текущего дня) для одного почтового аккаунта.
  2. Определение уникальности писем. Для каждого сегодняшнего письма выполняется поиск записи sys_email с таким же номером в поле mail_id, созданной текущий почтовый аккаунт. Если такая запись sys_email найдена - письмо считается неуникальным и не поступает на экземпляр.

Переход в список входящей почты через навигатор: System Mailboxes → Incoming Emails

:heavy_check_mark: 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();}

Если удаление происходит по расписанию оптимальным решением будет настроить скрипт по расписанию для исправления номеров.

Для перезапуска обработки писем начиная с определённой даты необходимо:

  1. Обновить созданные до удаления писем на ящике с инвертированием значения mail_id (скрипт указан выше).
  2. Запустить команду для получения недостающих писем с указание параметра даты. Например, php yii cron/parse-incoming-mail 'SINCE "7 June 2022"'

https://www.php.net/manual/en/function.imap-search

1 лайк