Я обнаружил интересную и редкую ошибку, касающуюся того, как ответы на сообщения в рассылках, дублируемые в Discourse, классифицируются.
У меня есть доказательства того, что ответы на одно письмо рассылки могут быть ошибочно отнесены ко второй рассылке (с иной аудиторией), если исходное письмо было отправлено одновременно в обе рассылки.
Представьте, что я подписан на две рассылки, A и B, используя свой адрес Gmail. У них может быть разная аудитория. Сервер рассылки отправляет одно сообщение тем, кто подписан на обе рассылки, но в строке «Кому» указано, что письмо отправлено в списки A и B одновременно. Это письмо приходит на мой адрес Gmail, который затем через фильтр пересылает копию на listA@mydiscourse.org.uk, при этом Gmail выбирает один из двух списков, указанных в строке «Кому». В Gmail настроена пересылка постов из A на listA@mydiscourse.org.uk, а постов из B — на listB@mydiscourse.org.uk. В Discourse созданы две категории с этими двумя разными входящими адресами для зеркального отображения (listA@mydiscourse.org.uk и listB@mydiscourse.org.uk).
Проблема, связанная с тем, что сервер рассылки и Gmail отправляют только одну копию, является отдельной и не является предметом этого сообщения об ошибке.
После этого копия письма, отправленного мне на мой аккаунт Gmail, отображается в категории, связанной с входящим адресом listA@mydiscourse.org.uk, после того как Gmail переслал его.
Пока всё в порядке (за исключением того факта, что изначально от сервера рассылки пришло только одно письмо).
Теперь другой пользователь, который состоит только в рассылке B, отвечает на это письмо серверу рассылки. Сервер рассылки отправляет это сообщение всем подписчикам рассылки B. Оно приходит на мой адрес Gmail со строкой «Кому», указывающей, что оно отправлено в список B. Gmail пересылает его на listB@mydiscourse.org.uk.
Однако затем Discourse классифицирует его так, будто оно было отправлено на listA@mydiscourse.org.uk!
Таким образом, это раскрывает участникам списка A содержание сообщения участника списка B!
Я подозреваю, что Discourse игнорирует путь, по которому письмо попало в систему, и классифицирует его на основе флагов идентификатора сообщения в заголовках, тем самым обходя путь поступления.
В исходном письме, отправленном в списки A и B, содержится один идентификатор сообщения, и я подозреваю, что классификация происходит исключительно на основе этого идентификатора.
Если бы исходный отправитель написал два отдельных письма в список A и список B, эта проблема не возникла бы, так как у двух сообщений были бы свои собственные идентификаторы.
Предлагаемое исправление: если категория зеркально отображает рассылку и сообщение поступает через зеркальный адрес, и, судя по заголовкам, оно является ответом на другое сообщение, которое находится в другом месте Discourse, то в ожидаемой категории должно создаваться новое сообщение (возможно, без явного родителя), вместо того чтобы ответ попадал в категорию, связанную с другой рассылкой.