После анализа механизма обработки входящих писем в коробочной версии Bitrix было установлено, что при отправке писем на так называемые "быстрые" почтовые ящики (адреса вида ) почтовый шлюз Bitrix инициирует HTTP-запрос в файл /bitrix/modules/mail/tools/mail_entry.php. Этот файл является основной точкой входа для обработки входящей почты и её маршрутизации в соответствующие сущности портала: живую ленту, задачи, CRM и другие модули.
При отправке письма на адрес, предназначенный для создания поста в живой ленте, запрос в mail_entry.php формируется корректно. В нём присутствуют как тип сущности (ENTITY_TYPE), так и идентификатор сущности (ENTITY_ID), благодаря чему стандартная логика Bitrix без проблем создаёт запись в живой ленте.
Ситуация оказалась иной при отправке писем на адреса, предназначенные для создания задач. В этом случае в запросе также корректно приходят все данные письма: тема, текст, HTML-версия, информация об отправителе и получателе, а также почтовый токен, который Bitrix связывает с пользователем. Однако в структуре связки при этом передаётся ENTITY_TYPE = TASKS_TASK, но поле ENTITY_ID остаётся пустым, при том что USER_ID указан корректно.
Именно это оказалось ключевой причиной проблемы. Стандартная логика Bitrix в mail_entry.php не содержит механизма, который интерпретировал бы связку ENTITY_TYPE = TASKS_TASK и пустой ENTITY_ID как команду на создание новой задачи. Штатный код предполагает либо работу с уже существующей задачей (когда ENTITY_ID заполнен), либо маршрутизацию письма в другие сущности. Сценарий "письмо в задачи без указания конкретной задачи — создать новую задачу" в коробочной версии отсутствует.
Из-за этого обработчик Bitrix\Mail\User::onEmailReceived() возвращал успешный результат, HTTP-ответ был 204, и система считала письмо обработанным, но фактически задача не создавалась. Ошибок при этом не возникало, что дополнительно усложняло диагностику. Для устранения этого пробела было реализовано кастомное решение, которое отлавливает случаи, когда приходит ENTITY_TYPE = TASKS_TASK при пустом ENTITY_ID, и трактует их как команду на создание новой задачи. На основе данных письма формируется задача: тема письма используется как заголовок, текст письма - как описание, а USER_ID - как автор и ответственный. После успешного создания задачи пользователю отправляется системное уведомление о том, что новая задача была создана на основе письма.


