Частная подкатегория email-in: Discourse::InvalidAccess

Продолжение обсуждения из Email-in Discourse::InvalidAccess:

Ошибка Discourse::InvalidAccess возникла снова. На этот раз причина не в длине темы письма. Я подозреваю, что это связано с тем, что категория является подкатегорией с ограниченным доступом. Однако категория настроена на получение писем от адресов без аккаунта, поэтому я ожидал, что письмо будет обработано и в ней будет создана новая тема.

Сценарий использования — сбор предложений (CFP): люди должны иметь возможность отправлять сообщения, но читать их и обсуждать могут только организаторы. Я считаю, что это отличается от случая, описанного в Email in to a private category


Релевантная документация: Configuring incoming email to create new topics or group messages - Site Management - Discourse Meta

Я выполнил пересборку после (пустой) команды git pull, и теперь всё, похоже, работает с добавлением второго домена в relay_domains Postfix. До этой серии тестов и после внесения изменений ошибок больше не было, но письма вообще не появлялись — ни в категории, ни в логах ошибок.

В containers/mail-receiver.yml у нас указано:

POSTCONF_relay_domains: forum.example.net, example.net

(Конечно, example.net — это не то, что фактически находится в конфигурационном файле. Там указан хостнейм форума и родительский домен, оба из которых настроены в DNS.)

Я заметил, что @mpalmer много лет назад упоминал, что добавление второго домена возможно, но:

Поэтому я ожидал, что небольшой параметр конфигурации relay_domains будет недостаточным, но, похоже, всё работает, если выполнить git pull перед пересборкой. Должна быть какая-то особенность в процессе сборки контейнера mail-receiver, из-за которой обновление pups не происходит…

Каким-то образом ошибка вернулась. Это немного нелепо, поскольку предыдущие тесты прошли успешно. Теперь, после очередной пересборки, входящая почта снова отклоняется. Я попытался повторить «танец» с git pull и rebuild, но на этот раз это, похоже, не сработало.

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

Сейчас ситуация такова: люди отправляют письма и получают отказ, поэтому мне приходится копировать отклонённые письма и вручную назначать темы авторам. «Опыт пользователя» при этом ужасен, а накладные расходы крайне раздражают.

Я не могу допустить, чтобы входящая почта принималась в публичной категории — в этом и заключается суть сбора предложений (CFP). Но, похоже, Discourse больше не способен решать эту задачу. :cry:

Это отклонённые письма от пользователей, у которых уже есть аккаунт?

Да, в некоторых случаях.

Письма от пользователей без учётной записи отклоняются (но категория настраивается как «принимать письма с адресов без учётной записи»).

Письма от пользователей из авторизованных групп проходят без проблем.

Письма от пользователей с учётной записью, но без доступа к категории, отклоняются.

Похоже, что проверка прав осуществляется, несмотря на настройку принятия по умолчанию.

В настоящее время я изучаю код контейнера mail-receiver, чтобы понять, можно ли найти там причину.

Для тех, у кого есть учётная запись, но нет доступа к категории, ожидается, что их заявки будут отклонены. Опция «Принимать письма от анонимных пользователей без учётных записей» применяется только к пользователям на стадии регистрации, а для тех, у кого уже есть учётная запись, применяются разрешения категории.

Странно, что пользователи без учётных записей отклоняются. Не связано ли это с изменениями, которые вы внесли в почтовый получатель?

Получается, что отклонение обрабатывается конечной точкой /admin/email/smtp_should_reject.json.

Я внес это изменение, потому что письма возвращались с ошибкой. Сначала я добавил несколько адресов в адрес входящей почты (разделяя их символом |), и это, казалось, сработало.

Понятно, это имеет смысл. Но немного запутанно. Если «кто угодно» может отправить письмо, а существующие пользователи — нет, это вроде бы противоречит самой цели.

Я проверю, находятся ли отклоненные письма в статусе «staged» или нет. Большое спасибо за помощь в отладке, @JammyDodger.

Я думаю, вы правы, @JammyDodger: новые пользователи проходят, существующие пользователи с обычным доступом к категории тоже проходят, но существующие аккаунты без доступа не могут отправлять письма в категорию.

Наверное, обходным путём будет создать группу CFP без уведомлений для категории, включающую всех существующих пользователей. Но это звучит очень костыльно и может иметь побочные эффекты, например отмену существующих уведомлений… Не уверен, что делать.

Думаю, люди используют отправку писем в группу как альтернативу, если это может быть полезно?

Это могло бы… Вероятно, именно это и следует сделать.

Вы знаете, будет ли группа с отключённой категорией иметь приоритет над другой группой с той же категорией, установленной как «в просмотре»?

Итак, подытожим:

  • Имеется приватная категория с функцией отправки писем, разрешённой для неизвестных адресов электронной почты (т.е. принадлежащих несуществующим учётным записям, так называемым «временным пользователям»)

  • → если письмо приходит с неизвестного адреса: оно доставляется в приватную категорию

  • → если письмо приходит с известного адреса: оно доставляется только в том случае, если пользователь состоит в группе, имеющей право доступа к этой категории.

Следовательно, если вы хотите использовать функцию отправки писем для сбора предложений (CFP), настройте функцию отправки писем для приватной группы и используйте этот адрес. Сообщения могут быть «сделаны публичными» и преобразованы в тему в категории (приватной или нет).