mattdm
(Matthew Miller)
1
我们已将 Wordpress 插件设置为将完整主题发布到我们论坛的公告类别。这效果相当不错,但 Discourse 发送的电子邮件被标记为 Content-Type: text/plain; charset=UTF-8。
据我所知,这在技术上是正确的,因为预期的格式是 Markdown,它在某种程度上是纯文本。但是,当然,Markdown 也包含“HTML 也是有效的,放手去做!”。
事实上,来自 Wordpress 的帖子是一堆 HTML。
其他人是如何处理这个问题的?有没有办法让发布到 Discourse 的帖子最终成为合理的人类可读的 Markdown?或者,有没有办法强制此类别生成的邮件使用 HTML 内容类型?或者……还有其他任何想法吗?谢谢!
angus
(Angus McLeod)
2
为了弄清楚@mattdm,当你说
你说的“消息”是指你从 Discourse 收到的关于你公告类别中新帖子的电子邮件通知吗?
我只是想了解你在这里试图解决的具体用户痛点。
mattdm
(Matthew Miller)
3
是的,抱歉。“邮件”指的是“电子邮件”。“它”指的是 Discourse,而不是 Wordpress 插件。我会编辑顶部的帖子来明确这一点。
mattdm
(Matthew Miller)
4
在我的想象中,最理想的情况是电子邮件消息是多部分的,其中包含一个纯文本渲染的 Markdown text/plain 和一个单独的 text/html。但我甚至不确定那会如何工作。
angus
(Angus McLeod)
5
抱歉,再说一遍,只是为了澄清,您提出这个问题是因为 Discourse 帖子(例如,您公告类别中链接到 Wordpress 帖子的帖子)的电子邮件通知中错误地包含 HTML 实体吗?如果是这样,您能分享一个例子吗?
我之所以坚持这一点,是因为 Discourse 中电子邮件通知的生成与任何与 Wordpress 插件相关的内容是完全分开的。电子邮件通知有自己的流程,并且有多种方法可以使 Discourse 帖子中出现 HTML 实体,而来自 Wordpress 的帖子只是其中一种。
换句话说,Discourse 帖子中存在 HTML 是一个与该帖子的电子邮件通知包含什么以及如何编码是不同的问题。了解您遇到的/提出的具体问题将有助于引起正确的关注。
mattdm
(Matthew Miller)
6
我可能误解了情况,但这是我的理解:
- WordPress 文章已发布。
- 插件响应此操作并创建一个 Discourse 帖子。
- Discourse 帖子都是 Markdown 格式,但碰巧来自 WordPress 的帖子是通过插件生成的 HTML 混乱(这在 Markdown 中是完全有效的)。
- 通过电子邮件订阅通知的用户会收到包含该文本的电子邮件——看起来像一团糟的 HTML。
我意识到有人可以 手动 以同样的方式创建带有大量 HTML 的 Discourse 帖子,但 实际上 这通常不是问题(如果成为问题,可以通过礼貌地请求“嘿,你能不能别这样?”来解决)。
希望这能说得通。
mattdm
(Matthew Miller)
7
一个例子:这个帖子
在 Discourse 中编辑帖子或发送时,它看起来像这样:
<small>最初发布于: https://communityblog.fedoraproject.org/cpe-hiring-a-software-engineer/
</small><br><p>社区平台工程组(简称 CPE)是 Red Hat 团队,负责 Fedora 和 CentOS 的 IT 和发布工程。我们目前有一个职位空缺,招聘一名 <a href="https://global-redhat.icims.com/jobs/96157/software-engineer/job?mobile=true&width=412&height=732&bga=true&needsRedirect=false&jan1offset=-480&jun1offset=-420">在印度的软件工程师</a>。</p>
<h2>关于职位</h2>
<p>我们正在 <a href="https://global-redhat.icims.com/jobs/96157/software-engineer/job?mobile=true&width=412&height=732&bga=true&needsRedirect=false&jan1offset=-480&jun1offset=-420">招聘新人才</a>,全职参与 Fedora 项目,主要作为我们发布工程团队的一员。您将有机会参与构建和发布 Fedora Linux 发布件和更新的基础设施。这个职位非常适合有发布工程经验或兴趣的人。</p>
<h2>关于 CPE</h2>
<p>我们的目标是保持核心服务器和服务的运行和维护,构建发布版本,并执行志愿者无法投入足够时间执行的其他战略任务。</p>
<p>有关更多信息,请参阅 <a href="https://docs.fedoraproject.org/en-US/cpe/">我们的文档</a>。我们期待与您见面,并希望很快与您合作!</p>
…这没什么用。
angus
(Angus McLeod)
8
好的,我会对你在这里提出的各个问题分别进行回复。我理解你为何将它们联系在一起,但希望你能明白它们实际上是独立的问题。
纯文本邮件通知中的 HTML 实体
最理想的情况是,邮件消息采用多部分格式,包含渲染干净的 Markdown 文本 text/plain 和单独的 text/html 部分。
实际上,Discourse 的邮件通知目前正是这样工作的。如果你查看 Discourse 邮件通知的“原始”内容,你会发现它同时包含文本版本和 HTML 版本。
你的意思似乎是(尽管我对此仍不完全确定),你在 Discourse 邮件通知的纯文本版本中看到了 HTML 实体,导致在不支持 HTML 的邮件客户端中查看邮件正文时,直接显示了实际的 HTML 实体字符。我是这个意思吗?你能提供一张来自不支持 HTML 的邮件客户端的截图吗?
如果是这种情况,这是 Discourse 邮件内容生成和格式化特有的问题,最好将其拆分到一个更针对性的话题中,发布在 Support 或 Contribute > Bug 板块。
Discourse 帖子中的 HTML
你在这里提出了一个相关的问题,但从技术角度来看,问题的核心在于 Discourse 如何处理更广泛的导入内容。目前,导入内容的默认格式是 HTML,而不是 Markdown。
你可以在其他场景中也看到类似情况,例如 RSS Polling 插件,它和 WP Discourse 插件一样,会将 HTML 导入到帖子内容中。另外请注意,embed support markdown(嵌入支持 Markdown)站点设置默认是关闭的,所有其他处理帖子中嵌入 HTML 的站点设置(例如 allowed embed selectors)也是如此。
我在此部分基于推测,但 Discourse 在早期处理导入内容时做出这一战略决策的最可能原因是为了简单性和保真度,即从 HTML 转换为 Markdown 的过程往往是不完美的。下面我会提到一个关键的例外情况。
WP Discourse 插件可以尝试在将 WordPress 帖子发送到 Discourse 之前,将其 HTML 转换为 Markdown。是的,确实存在将 HTML 转换为 Markdown 的 PHP 库,但当转换标记语言时,事情从来不会那么简单,尤其是考虑到 Markdown 的不同变体。
事实上,考虑到 Discourse 中已经有一个自定义的 HtmlToMarkdown 转换器,WP Discourse 插件尝试自行处理转换反而是不明智的。目前,该转换器处理的是导入到 Discourse 的电子邮件中的 HTML 到 Markdown 的转换。如果要将 WordPress 帖子的 HTML 转换为 Discourse Markdown,则需要由该转换器来处理。
目前,WP Discourse 插件使用 Discourse API 来发布帖子,即 /posts 端点。因此,你本质上是在说,你希望为 Discourse /posts 端点添加 HtmlToMarkdown 转换器支持(即作为可选的查询参数)。你可以为此提出建议,如果该功能被实现,WP Discourse 插件将会将其作为可选设置来采用。