未解释的电子邮件::接收者::无效帖子错误

类似于 Mirrored mailing list is rejecting registered forum users

它似乎不是。所引用的主题似乎是由于配置不正确而导致的权限问题。

1 个赞

我的错,为造成的干扰表示歉意。

我已经提出了一个修复我发现的问题的方案,但根据我目前找到的所有信息,执行混淆处理的组件只影响已保存的记录,而不影响处理过程中的传入邮件。

我相当有信心问题的根源一定是别的东西,但我还不知道那可能是什么。

1 个赞

鉴于此更改已合并,我今天升级了我们的 Discourse 实例,并将在未来几天内密切关注电子邮件拒绝日志。

1 个赞

自升级以来,已经记录了三个新的 InvalidPost 错误,但拒绝详情有所不同:所有三个错误都显示了正确的消息正文(以前显示的是邮件列表签名),并且拒绝原因现在是 Access Denied

至少这是一个进步。

错误的理由会保留在用户那里吗?

您确定错误是不正确的吗?用户是否有权限在该类别中发帖?用户是否活跃?

从表面上看,原因似乎不成立:该账户是活跃的,没有被暂停或静音。然而,我注意到该账户没有被“分阶段”(staged),而大多数邮件列表帖子最终出现在 Discourse 中的账户都是这种情况。所有来自非分阶段用户的帖子都来自版主团队的成员。

我们最初是使用此指南设置邮件列表镜像(mirror)类别的:Mirroring a read-only mailing list in Discourse

不过,我刚刚查看了该类别的配置权限,似乎我们的版主(moderators)组被添加了,并且向 everyone(所有人)授予了 reply(回复)权限。

我已经移除了这些额外的权限,只保留了 everyonesee(查看)权限。也许这些“额外”的权限干扰了 Discourse 处理这些特殊的“邮件列表镜像”类别的方式?

用户未处于“暂存”状态可能是问题所在。系统不会检查“暂存”用户是否具有在分类中发帖的权限,但会检查注册用户。因此,如果用户不在具有在分类中回复主题权限的组中,他们的回复将被拒绝,因为他们没有权限。这同样适用于新主题和“创建”权限。

这里有一个关于此问题的讨论主题:Category not accepting "anonymous email" from known users

1 个赞

然而,我刚刚查看了分类上配置的权限,看起来我们的版主组被添加了,并且 everyone 被授予了 reply 权限。

我已经移除了这些额外的权限,只留下了 everyone 拥有 see 权限。也许这些“额外”的权限干扰了 Discourse 处理这些特殊的“邮件列表镜像”分类的方式?

其实,别提了,我一定是看错了另一个分类,因为邮件列表镜像分类的权限正如预期的那样:只有 everyone 拥有 see 权限。话虽如此,我的观察是来自非版主、非预演用户的帖子似乎一直被拒绝。

根据我所看到的,这个解释绝对有道理,但如果是这种情况,这绝对是出乎意料且令人困惑的行为:那些向镜像邮件列表发帖但恰好在 Discourse 上拥有关联电子邮件地址的账户的发件人,绝对应该被允许向启用了“此分类镜像邮件列表”设置的分类中发帖。

1 个赞

如果 Discourse 能够说服/资助 Mailman 团队的某人(或类似的人)来改进 Discourse 处理电子邮件的方式,那就太棒了。

1 个赞

我们有测试来确保 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

1 个赞

哦,这很有趣,而且似乎与此处发布的设置邮件列表镜像的指南相悖:

使用您的 Discourse 电子邮件地址(例如 discourse@example.com)订阅邮件列表。

我检查了代表 Discourse 订阅我们邮件列表的电子邮件地址,它确实是 discourse@forum.torproject.org

我应该在这里使用不同的电子邮件地址吗?如果是,是哪个?

不,这都很好。

你可能遗漏了这一部分:

(请记住,Discourse 只使用邮件头(收件人/抄送)而知道信封收件人地址)

对于 tor-relays 类别,我将“自定义收件电子邮件地址”设置为 tor-relays@lists.torproject.org,我相信这与 Mailman 发送邮件的 To: 邮件头相匹配。

1 个赞