无法从不同的 Discourse 服务器转发邮件通知

复现步骤

  • 从 Discourse 站点 A 收到一封有用的电子邮件通知,该通知来自你设置为“关注首帖”的类别。
  • 将该电子邮件通知转发到 Discourse 站点 B,使用已配置为向现有群组创建新消息的电子邮件地址。

预期结果

内容被正确处理,并生成一条私信。

实际结果

电子邮件未被处理,消息未创建,并收到以下退信通知给转发者:

很抱歉,您发送至 discourse-site-b@example.org 的电子邮件(标题为 Fw: [Discourse 站点 A] [公告] 大新闻)未能成功。在处理您的邮件时发生了无法识别的错误,因此邮件未被发布。请重试,或联系工作人员。

2 个赞

我的第一反应是检查您的“阻止自动生成邮件”设置。

感谢你的想法。由于我是从邮件客户端手动转发该邮件的,因此并未发送该头部信息,但你的评论启我去查看错误日志中是否确实存在类似的问题。

错误出现在 /admin/email/rejected 中:

undefined method 'lines' for nil:NilClass

不确定这对比我更懂行的人是否有帮助。


更新: 另一个数据点。当我尝试转发另一个人的邮件时,收到了同样的拒收邮件和上述相同的日志错误。这让我认为问题可能更多与 Microsoft Outlook/Exchange 客户端处理转发邮件的方式有关。我将继续进行排查。

4 个赞

这听起来确实是一个我们需要修复的 bug。不过,即使修复了这个问题,你转发的邮件中仍包含一些让我们认为它是某种群发工具的邮件头,你需要以某种方式将其加入白名单。

@zogstrip 我们是不是应该把那个 lines nil 类的问题分配出去?

3 个赞

表面上看,如果这个漏洞得到修复,我能否获得更多关于邮件被拦截原因的洞察?

我会更仔细地检查我的服务器可能添加的邮件头。如果其他人想更仔细地查看,我也很乐意单独分享它们;但目前可能还为时过早。

3 个赞

是的,这个 bug 可能掩盖了真正的问题。解决它会让事情稍微好转一些。

5 个赞

5 个赞

@gerhard 既然你最后动过那段代码路径,方便看一下吗?

5 个赞

我无法复现该问题,但我看到了代码可能出错的地方。
@downey 能否请您通过私信将原始邮件发给我?我想确保我应用了正确的修复方案。

5 个赞

我从未收到过示例邮件,但我已修复了根本问题。

如果您在转发邮件方面仍遇到问题,请创建新的错误报告。

4 个赞