Аналогично Mirrored mailing list is rejecting registered forum users
Похоже, что это не так. Указанная тема, судя по всему, связана с проблемой прав доступа, вызванной неправильной конфигурацией.
Моя вина, извините за неудобства.
Я предложил исправление для найденной мной проблемы, но, судя по всему, компонент, выполняющий искажение, влияет только на сохранённую запись и не затрагивает входящую почту в процессе обработки.
Я достаточно уверен, что источник проблемы кроется в чём-то другом, но пока не знаю, в чём именно.
Учитывая, что это изменение было слито, я сегодня обновил наш экземпляр Discourse и в ближайшие дни буду следить за логами отклонённых писем.
Уже после обновления были зафиксированы три новых ошибки InvalidPost, однако детали отклонения отличаются: во всех трёх случаях отображается правильное тело сообщения (ранее там показывалась подпись рассылки), а причина отклонения теперь — Access Denied.
По крайней мере, это уже какое-то улучшение.
Остаётся ли причина ошибки у пользователя?
Вы уверены, что ошибка неверна? Есть ли у пользователя разрешение на публикацию в этой категории? Активен ли пользователь?
На первый взгляд, причина неочевидна: учётная запись активна, не заблокирована и не заглушена. Однако я заметил, что учётная запись не находится в режиме «staged», что характерно для большинства учётных записей, чьи сообщения с рассылки действительно попадают в Discourse. Все сообщения от пользователей, не находящихся в режиме «staged», поступают от членов команды модерации.
Наша категория для зеркалирования рассылки изначально была настроена согласно этому руководству: Mirroring a read-only mailing list in Discourse
Однако я только что проверил настроенные права доступа для этой категории и обнаружил, что группе модераторов были предоставлены права, а группе everyone — право reply.
Я убрал эти дополнительные права, оставив группе everyone только право see. Возможно, эти «дополнительные» права мешают корректной обработке Discourse специальных категорий типа «зеркало рассылки»?
Проблема может заключаться в том, что пользователь не находится в статусе «проверенный» (staged). Проверенные пользователи не проверяются на наличие разрешения на публикацию в категории, тогда как зарегистрированные пользователи — да. Таким образом, если пользователь не входит в группу, имеющую разрешение на ответы в этой категории, его ответ будет отклонён из-за отсутствия необходимых прав. То же самое касается создания новых тем и права на создание (create).
Обсуждение этой проблемы доступно здесь: Category not accepting "anonymous email" from known users
Однако я только что проверил настроенные права доступа к категории, и, похоже, наша группа модераторов была добавлена, а группе
everyoneбыли предоставлены праваreply.>
Я убрал эти лишние права, оставив только правоseeдля группыeveryone. Возможно, эти «лишние» права мешают корректной работе Discourse с такими специальными категориями «зеркало рассылки»?
На самом деле, забудьте об этом: я, должно быть, смотрел на другую категорию, потому что права доступа для категории «зеркало рассылки» соответствуют ожиданиям: только у группы everyone есть право see. Тем не менее, я заметил, что сообщения от пользователей, не являющихся модераторами и не находящихся в режиме ожидания, последовательно отклоняются.
Это объяснение, безусловно, имеет смысл с учётом того, что я наблюдаю, но если это так, то такое поведение определённо неожиданное и запутывающее: отправители, публикующие сообщения в зеркальную рассылку, но уже имеющие учётную запись в Discourse с соответствующим адресом электронной почты, безусловно, должны иметь возможность публиковать сообщения в категориях, для которых включена настройка «Эта категория зеркалит рассылку».
Было бы здорово, если бы Discourse смог убедить или нанять кого-то из команды Mailman (или похожего специалиста), чтобы улучшить работу Discourse с электронной почтой.
У нас есть тесты, гарантирующие, что Discourse может получать письма для категорий только для чтения, которые являются зеркалами почтовых списков:
Для поддержки этой функции сообщения, отправленные в зеркала почтовых списков, обходят некоторые проверки:
def create_post(options = {})
…
if sent_to_mailinglist_mirror?
options[:skip_validations] = true
options[:skip_guardian] = true
else
options[:email_spam] = is_spam?
options[:first_post_checks] = true if is_spam?
options[:email_auth_res_action] = auth_res_action
end
def sent_to_mailinglist_mirror?
@sent_to_mailinglist_mirror ||=
begin
destinations.each do |destination|
return true if destination.is_a?(Category) && destination.mailinglist_mirror?
end
false
end
end
Предположительно, что-то в вашей конфигурации создаёт условия, при которых факт того, что это зеркало почтового списка, не обнаруживается? Обратите внимание, что для обхода этих проверок письмо должно быть отправлено на адрес электронной почты категории, а не на адрес reply_by_email_address сайта.
О, это интересно, и это, кажется, противоречит рекомендациям опубликованным здесь по настройке зеркала рассылки:
Подпишитесь на рассылку, используя адрес электронной почты вашего аккаунта Discourse (например,
discourse@example.com).
Я проверил адрес электронной почты, подписанный от имени Discourse на наши рассылки, и он действительно discourse@forum.torproject.org.
Должен ли я использовать здесь другой адрес электронной почты? Если да, то какой?
Нет, всё в порядке.
Возможно, вы упустили вот этот момент:
(помните, что Discourse использует только заголовки сообщения (To/CC) и не знает адрес envelope-to)
Для категории tor-relays я установил «Пользовательский входящий адрес электронной почты» равным tor-relays@lists.torproject.org, что, как я полагаю, соответствует заголовку To: писем, отправляемых Mailman.