Дилемма двусторонней синхронизации почтальона

Я внедряю двустороннюю синхронизацию с Mailman. Это сообщество считает, что отказ от Mailman невозможен, и хочет, чтобы пользователи Mailman продолжали использовать только его, но при этом могли взаимодействовать с пользователями Discourse, участвующими в одной категории.

На короткое время казалось, что решение почти найдено: подписать адрес категории Mailman на список, включить опцию «Категория зеркалит рассылку», а затем добавить пользователя Discourse с адресом рассылки Mailman, который следит за этой категорией.

Моей главной проблемой были почтовые циклы. Мне казалось, что в первом тесте всё работало отлично, и единственная проблема заключалась в том, что участники рассылки могли отписаться от отслеживания категории Discourse через Mailman. Я написал плагин, чтобы убрать ссылки на отписку, и думал, что мы уже в безопасности. Но это было не так.

Самая большая проблема, как я считаю, заключается в том, что когда сообщение из Discourse отправляется в список, и пользователь отвечает на него, ответ идёт напрямую в Discourse. При этом сообщение отклоняется, потому что этот пользователь не является тем пользователем Discourse, который подписан на список. Не уверен, можно ли это как-то решить. Возможно, я мог бы переопределить код, выполняющий эту проверку, и если отправитель имеет адрес, отличный от ожидаемого, обрабатывать его как любого другого пользователя в очереди? Тогда единственной проблемой останется то, что люди, нажимающие «Ответить» и думающие, что отправляют сообщение одному пользователю, на самом деле отправляют его в список.

НО есть и другая проблема, которую, как мне кажется, решить сложнее: если пользователь Mailman отвечает через Mailman (а не по адресу reply-to, обсужденному выше), это сообщение попадёт в Discourse через Mailman, и Discourse воспримет его как новую тему. Не вижу, как это решить (поскольку тема будет всё больше и больше обрастать строками [blah], добавляемыми Mailman и Discourse). Но, возможно, решение только проблемы с ответами будет достаточно хорошим.

Есть ли у кого-то другие идеи?

1 лайк