bsoares
(Ben Soares)
2021 年10 月 4 日 14:32
24
嗯,在那个示例中,以及您发给我的完整邮件源代码中(谢谢!),moz-do-not-send 属性不应影响包含该属性的 <img> 或 <a> 标签的显示。mozfilter 仅检查 class 属性中的值,我暂时看不出它会在其他地方被过滤。
因此,我无法弄明白为什么带别名的链接的内容和 href 会被分离,除非出于某种原因,Discourse 导入器突然决定使用 MIME 编码邮件中的纯文本部分(其中确实将文本和 URL 分离了)。至于它为什么会这样做,我也不清楚。
在您的测试 Discourse 环境中,您能否尝试导入/发送一封包含带别名链接以及例如嵌入图像或其他能将其标记为邮件 HTML 部分的元素的 Thunderbird HTML 邮件?
感谢您的尝试。
然后,邮件中位于文本之间(左侧)的图片在 Discourse 中(右侧)会出现在末尾:
bsoares
(Ben Soares)
2021 年10 月 5 日 08:52
26
我仍然认为这可能是 Discourse 使用了其他 MIME 部分(在此例中,是一个纯文本部分后跟一个图像/…部分)来生成其 Markdown 版本,尽管我不知道原因。也许 HTML 验证器因为像 moz-do-not-send 这样严格非验证的属性而拒绝了 text/html 部分?
能否再做一次测试,使用相同的帖子(中间包含图像的一些文本,但让部分文本加粗,甚至只需一个词即可)。我认为这将确定文本部分是来自 text/plain 还是 text/html 块。
另外,抱歉再次询问,但为了确保无误,您是否已将 incoming_email_prefer_html 设置为 true(已勾选)?
bsoares
(Ben Soares)
2021 年10 月 25 日 10:50
28
谢谢 @Flominator 。我看到加粗的文本变成了斜体,所以它肯定没有直接使用 HTML,但不知何故确实捕捉到了强调。我想知道邮件的 text/plain 部分是否被添加了一些标记/向下格式——您能像上次一样通过私信把邮件源代码发给我吗?
bsoares
(Ben Soares)
2021 年10 月 27 日 11:13
29
嗨 @Flominator ,谢谢提供原始邮件。查看邮件的 text/plain 替代部分,确实会在 text/html 部分中加粗的文本周围加上星号。大多数 Markdown 渲染器(例如 Discourse 中的那个)会将此解释为斜体。以下是单独复制并粘贴的 text/plain 部分:
Und nochmal soll ich für hier
https://meta.discourse.org/t/urls-being-dropped-from-thunderbird-generated-replies/163751/24
eine Testnachricht schicken.
Bild in die Mitte dann wieder Text von dem ein Teil sogar fett
geschrieben ist
Gruß
Flo
这看起来与您的截图完全一致。
因此,我认为发生的情况是 text/html 部分因被视为无效 HTML 而被拒绝(可能是由于 a 标签中使用了非标准的 moz-do-not-send 属性名称)。这将需要打补丁以更改有效 HTML 的检查方式(可能只需移除这些属性),但在未将其纳入核心代码的情况下,我对该方案的稳定性不太有信心。我会在有时间时查看一下。
bsoares
(Ben Soares)
2022 年4 月 26 日 08:56
30
大家好,关注此话题的朋友们,
我刚刚发现(在更新之前),一个独立的修复(与此类似但更具体)已提交到此问题:
issue: FIX: properly clean Thunderbird emails, don't remove links by ValdikSS · Pull Request #16543 · discourse/discourse · GitHub
commit: FIX: properly clean Thunderbird emails, don't remove links (#16543) · discourse/discourse@f7540aa · GitHub
这意味着,当您升级以包含此新提交(可能是您的下一次升级)时,上面评论中附加的补丁将失败(可能不会“壮观地”失败,但可能需要重新构建才能再次进行升级)。
如果您已自动应用它(例如,在您的 app.yml 中使用 git apply cmd,如上所述),您应该在下次升级之前将其删除。事实上,可能需要进行重建,因为该提交可能无法应用,因为 receiver.rb 中应用该提交 diff 的位置已被补丁更改。
我将 1) 从 app.yml 中删除 git apply cmd,2) 重建应用程序,3) 更新(如果尚未在重建中完成)。我会告诉您进展如何……
[10 分钟后……]
最后,我改用了以下方法,因为它在重建过程中不需要任何停机时间。
从 app.yml 中删除补丁的 git apply(仅在下次重建应用程序容器之前需要执行此操作)
使用以下命令恢复已打补丁的文件:
i) launcher enter app
ii) (现在在应用程序容器中)
cd /var/www/discourse
git checkout ./lib/email/receiver.rb
exit
使用 Web 管理更新来更新 discourse
我是此补丁的作者。它对我来说效果很好,我没有发现任何缺点。