类似于 Mirrored mailing list is rejecting registered forum users
它似乎不是。所引用的主题似乎是由于配置不正确而导致的权限问题。
我的错,为造成的干扰表示歉意。
我已经提出了一个修复我发现的问题的方案,但根据我目前找到的所有信息,执行混淆处理的组件只影响已保存的记录,而不影响处理过程中的传入邮件。
我相当有信心问题的根源一定是别的东西,但我还不知道那可能是什么。
鉴于此更改已合并,我今天升级了我们的 Discourse 实例,并将在未来几天内密切关注电子邮件拒绝日志。
自升级以来,已经记录了三个新的 InvalidPost 错误,但拒绝详情有所不同:所有三个错误都显示了正确的消息正文(以前显示的是邮件列表签名),并且拒绝原因现在是 Access Denied。
至少这是一个进步。
错误的理由会保留在用户那里吗?
您确定错误是不正确的吗?用户是否有权限在该类别中发帖?用户是否活跃?
从表面上看,原因似乎不成立:该账户是活跃的,没有被暂停或静音。然而,我注意到该账户没有被“分阶段”(staged),而大多数邮件列表帖子最终出现在 Discourse 中的账户都是这种情况。所有来自非分阶段用户的帖子都来自版主团队的成员。
我们最初是使用此指南设置邮件列表镜像(mirror)类别的:Mirroring a read-only mailing list in Discourse
不过,我刚刚查看了该类别的配置权限,似乎我们的版主(moderators)组被添加了,并且向 everyone(所有人)授予了 reply(回复)权限。
我已经移除了这些额外的权限,只保留了 everyone 的 see(查看)权限。也许这些“额外”的权限干扰了 Discourse 处理这些特殊的“邮件列表镜像”类别的方式?
用户未处于“暂存”状态可能是问题所在。系统不会检查“暂存”用户是否具有在分类中发帖的权限,但会检查注册用户。因此,如果用户不在具有在分类中回复主题权限的组中,他们的回复将被拒绝,因为他们没有权限。这同样适用于新主题和“创建”权限。
这里有一个关于此问题的讨论主题:Category not accepting "anonymous email" from known users
然而,我刚刚查看了分类上配置的权限,看起来我们的版主组被添加了,并且
everyone被授予了reply权限。我已经移除了这些额外的权限,只留下了
everyone拥有see权限。也许这些“额外”的权限干扰了 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 只使用邮件头(收件人/抄送)而不知道信封收件人地址)
对于 tor-relays 类别,我将“自定义收件电子邮件地址”设置为 tor-relays@lists.torproject.org,我相信这与 Mailman 发送邮件的 To: 邮件头相匹配。