排查收到的电子邮件中遗漏的内容

我正在调查一些从邮件列表导入电子邮件后内容被省略的帖子。有些邮件使用“~~~~~~~~~~~~~~~~”行来包裹标题或章节,而该分隔符首次单独出现及其下方的所有内容都会被从 Discourse 帖子中省略。

检查帖子中的原始邮件时,我可以看到原始的 base64 编码邮件,切换到“文本”标签页后,我发现它已完整解码,没有任何省略。

./launcher enter app
rails c
Post.find_by(id: 154678)
=> #<Post:0x000055b8da925e08
...

通过 Rails,我可以看到 raw 列在第一个“~~~~~~~~~~~~~~~~”之前立即停止,而 cooked 列显然包含与 raw 相同的内容,但已转换为适当的 HTML 格式。我尝试更改了一些与修剪邮件相关的设置,但不确定如何测试这些设置是否生效。

据我理解,对帖子执行“重建 HTML”或在 Rails 中运行 Post.find_by(id: 154678).rebake! 会读取 raw 列的内容并生成 HTML,从而设置 cooked 列。但我不确定它是否会重新处理 raw_email 列的内容,因此不确定如何测试更改的设置是否产生了效果。

如果 rebake! 不会重新处理 raw_email,我该如何让 Discourse 重新处理帖子的 raw_email,以便确保我排查问题的方法正确?

如果您有任何关于如何防止内容被省略的建议,也欢迎提出。

在继续搜索相关主题时,我偶然在管理后台的“邮件”部分发现了“高级测试”功能。我怀疑这就是导致问题的原因,使用该功能后,我确认确实是“修剪传入邮件”设置所致,该设置的描述为“修剪传入邮件中不相关的部分”。

关闭该设置后,我得到了这些邮件的正确结果,但重新烘焙(rebaking)似乎并未重新处理这些邮件。因此问题依然存在:如何告知 Discourse 重新处理来自其传入邮件的帖子?

在仓库中翻找处理邮件的相关代码后,我最终找到了 posts:refresh_emails 这个 rake 任务,它接受一个可选的主题 ID。使用以下命令,顾名思义,会重新处理邮件,并重新烘焙指定主题中的所有帖子。

cd /var/discourse
./launcher enter app
rake posts:refresh_emails['24961']

在禁用“修剪传入邮件”的情况下,这确实按预期恢复了该主题中帖子的原始内容。这确实暴露了另一个我需要在继续之前解决的问题,但这不属于本主题的讨论范围。若要刷新所有主题中的所有邮件,我将可以使用如下 rake 任务:

cd /var/discourse
./launcher enter app
rake posts:refresh_emails