来自邮件的同名主题

Discourse 专家您好,

我们有一些脚本会向 Discourse 分类发送邮件,以自动跟踪项目事件,例如测试结果、新提交的用户问题等。我曾天真地认为,如果两封邮件的主题行相同(例如“linux64 测试”),它们会自动归入同一个话题;但实际情况似乎是,每封这样的邮件都会生成一个独立的话题。(通过邮件回复话题会将其保留在同一个话题中,这当然符合预期)。

在论坛上搜索了一下这个问题,我发现了关于“允许具有相同、重复标题的话题”以及“如果分类不同,允许具有相同、重复标题的话题”这两个设置的提及。令我惊讶的是,我们的网站上这两个选项均未勾选,但由于这些脚本,我们确实存在标题相同的话题。是否这些设置仅适用于从网站界面生成的话题,而不适用于通过邮件生成的话题?

无论如何,是否有任何方法可以配置 Discourse 站点,使得发送到特定分类且主题行相同的邮件能够自动合并为单个话题,而不是每封邮件生成一个独立话题?(我理解这可能会在两位用户恰好通过邮件发布相同主题的话题时造成轻微混淆,但在我看来这是一个合理的权衡)。

谢谢,
-Brad

2 个赞

经过进一步的尝试,我发现“允许具有相同重复标题的主题”这一设置似乎仅适用于通过网站创建的主题,而不适用于通过电子邮件接收的主题。为此,我已在 Meta Discourse 上提交了一个功能请求,希望在电子邮件主题与现有主题标题匹配时自动扩展该主题,而不是创建多个标题完全相同的新主题:功能请求:当电子邮件主题匹配现有主题标题时自动扩展该主题

如果你不看网站,你怎么知道标题是否已被使用?

如果你不查看网站,你怎么知道标题是否已经被使用过?

我不确定我是否理解你的问题(因为我担心自己在重复自己),但还是尝试回答一下:

促使我们在 Discourse 网站上提出这个问题的场景是:脚本生成的帖子使用可预测的主题行(例如,“linux64 测试”),其目的是将它们归入同一个主题中。对于这些脚本来说,标题是否已被使用并不重要,只要行为符合“如果已存在具有该主题行标题的主题,则通过邮件向该现有主题添加帖子,而不是创建新主题;如果不存在,则创建以该主题行为标题的新主题”即可。

再假设一种情况:某用户在安全环境中工作,不允许直接与网站交互,但其系统管理员会将感兴趣的网站内容镜像到其环境中供只读浏览。如果用户知道某个特定主题的主题行,就可以通过邮件向该主题添加新帖子,而无需在收件箱中已有该主题的邮件作为回复对象。

如果我误解了你的问题,请告诉我。

1 个赞

要求改变整个行为是一个非常具体的使用场景。

您是否考虑过使用 SMTP 以外的其他方式来发送消息?

您是否考虑过使用 SMTP 以外的方式来进行消息投递?

我们尚未考虑过,但如果这是最佳实践,我们当然会认真考虑。为了确保我理解正确,您是在建议我们的脚本通过模拟人类操作 HTML 的方式与网站交互,从而向 Discourse 发布内容吗?还是说 Discourse 站点支持 API,脚本可以直接调用?如果您能提供相关的指引或示例,那将非常有用;我们确实对 Discourse 管理还非常生疏。

或者,我在想是否可以在邮件头中使用某种技巧,让 Discourse 将邮件追加到现有主题下,而不是创建新主题。我假设仅将主题行设为“Re: linux64 testing”是不够的,真正起作用的是 Reply-to: 地址和/或邮件头元数据,它们决定了邮件是作为回复追加到现有主题,还是开启新主题?(如果是这样,我们可以为每个可能的脚本主题行手动创建主题,找出对应的元数据,然后将其嵌入脚本中。但如果已经存在一种通过主题行自动合并邮件到现有主题的方法,这种做法就显得过于繁琐,尤其是对于那些可能会随时间生成新主题行的脚本而言)。

这是一个非常具体的用例,要求改变整体行为。

也许如此,但公平地说,在原始帖子中,我只是在询问是否有办法实现我们的目标,并表达了困惑:尽管我们已取消勾选“允许重复主题”选项,却仍然收到了多个相同标题的主题。我未能找到任何文档说明这是预期行为,而且考虑到 Discourse 会以各种理由拒绝邮件(例如“该主题行似乎不是一个完整的句子”),我以为我们可能会收到类似“该主题标题已在该类别中存在”的退信(虽然这并不会让我更高兴,但至少看起来与复选框的标题描述更加一致)。

不过,我也认为请求这种行为改变并不奇怪:我认为 Discourse 站点能够通过电子邮件接收帖子,这一点非常棒且功能强大。在我们的案例中,这已经为实现脚本更新现有 Discourse 主题的目标完成了 80%。而且,该功能请求与我之前在 Discourse-meta 上看到的其他已实现的请求类似,因为它显然很有用(许多项目都有生成邮件的脚本),并且在我看来并不与 Discourse 的理念相冲突(尽管我们确实刚接触管理层面)。这并不是说这个想法显而易见或无需权衡,只是我觉得提出这个问题本身并不 unreasonable。

从这里开始

1 个赞

当用户直接与网站交互时,会使用电子邮件回复密钥来确保所有内容归属于同一主题。在这种情况下,您可以使用邮件列表模式,将回复密钥带入安全环境。

“邮件输入”功能(与“通过电子邮件回复”不同)目前仅用于创建新主题,绝不会向现有主题添加内容。

3 个赞

你好 @riking@Stephen

上周你们对这个问题的评论让我以为我理解了 Discourse 的当前状态(我将其总结为:“按设计,通过‘邮件投稿’功能提交的重复标题会被接受,无论‘允许重复主题’设置的状态如何,因为不清楚站点还能怎么做?”)。但今天我发现自己有些困惑,因为我们的脚本收到了一些邮件的退信,提示:

标题已被使用

是我误解了当前的情况,还是你们那边自上周以来有所变化?

我们这边发生了一些变化,或许能解释行为上的改变:

  • 我将脚本发送邮件所使用的邮箱地址设置为 Discourse 站点上的“已知用户”,因为否则我会偶尔收到退信。因此,我提高了它的信任级别以绕过该问题(在我之前的消息中,脚本是作为“匿名用户”操作的)。

  • 我将该已知用户添加到了一个用户组中,以便允许它向原本受限的类别发布主题(由于遇到了 https://meta.discourse.org/t/category-not-accepting-anonymous-email-from-known-users/42871/13)。

  • 现在我们的脚本已成为已知用户,我禁用了匿名用户向该类别发布主题的功能。

假设你们那边没有发生变化,那么是否可以认为:对于不能通过邮件提交重复标题的主题,注册用户比匿名用户受到更严格的标准?这种选择的理由是什么?(我通常期望注册用户的能力应超过匿名用户)。

感谢提供任何见解。

1 个赞