联系表单

在最新版 Discourse 中失效

我最近更新了 Discourse,这个插件导致网站崩溃了。(坦率地说,这更可能是我的糟糕修改导致的结果,而不是 Discourse 本身的问题。我目前没有精力去找到解决方案,所以只是留个警告给其他人。)

:information_source: 摘要 在任何标记为 contact 的主题顶部添加一个联系表单。通过表单提交的信息将发送到配置为接收的组或类别。
:hammer_and_wrench: 仓库链接 https://github.com/jericson/discourse-contact-plugin
:open_book: 安装指南 如何在 Discourse 中安装插件

功能

启用后,“联系表单”插件会在任何标记为 contact 的主题顶部放置一个联系表单。通过表单提交的数据会发送到配置为接收来自 contact_form_email 邮件的类别或组。[1] 与传统的联系表单一样,提交者不需要拥有网站账户。

访客可能会看到以下内容:

请注意,这是一个常规帖子,可以在正文中包含您可能希望包含的任何说明。[2] 目前字段名称是硬编码的,没有进行真正的验证,但请参阅下面的 待办事项部分。消息发送后,它将显示在配置的组的消息流中:

根据其邮件通知的配置方式,配置组的成员也可能从 Discourse 收到邮件:

配置

为了使用此插件,您必须配置接收邮件以创建新主题或组消息。不需要设置邮件回复,因为插件实际上不发送邮件。它会劫持 API 来模拟传入邮件。(话虽如此,邮件回复是一个有用的功能!)

特别是,此插件要求:

  • email_in
  • enable_staged_users

被启用。

启用后,任何标记为 contact 的主题都会在 topic-above-posts 插件插槽中添加一个联系表单。

发送到组

由于人们将使用此表单提交他们的个人信息,因此将结果发送到一个封闭的组是最安全的选择。

  1. 为将要处理联系信息的人创建一个新组。(我通常为简单起见称之为“联系人”,但它可以是任何东西,包括现有组。)
  2. 添加将接收联系信息的人员。
  3. 不要勾选任何访问选项。这应该是一个封闭的组。
  4. 根据您组织的需要合理地更改组的可见性。
  5. 将“自定义接收邮件地址”设置为与 contact_form_email 设置相同。(默认情况下,这是“contact@example.com”)。

发送到类别

也可以使用“自定义接收邮件地址”类别设置发送到类别。同时确保启用“接受没有账户的匿名用户的邮件”。

但是,不建议将联系信息发送到类别! 如果由于某种原因更改了类别的访问权限,可能会将个人信息泄露给不应该访问的人(或搜索引擎)。如果将联系信息发送到组消息中,这种情况发生的可能性要小得多。

限制谁可以添加联系表单

联系表单可能在各处冒出,这可能很奇怪,所以您可能希望限制谁可以使用 contact 标签。为此,请创建一个新的标签组:

  1. /tags 页面,选择右上角的扳手图标。
  2. 选择“管理标签组”,然后选择“ :heavy_plus_sign: 新建组”。
  3. 填写一个合适的名称(例如“仅限员工”),添加 contact 标签,然后选择“标签对所有人可见,但只有以下组可以使用它们”。
  4. 选择您希望允许添加联系表单的组(通常是“staff”或“admins”)并保存标签组。

变更日志

  • 2024 年 4 月 25 日:Alpha 版本发布。

待办事项

  • 我想设置测试,以确保我在进行更改时没有破坏任何东西。我特别想验证没有账户的人可以提交他们的数据。
  • 在测试过程中,我发现了一个重大的数据泄露。我已经移除了那个特定的漏洞,但我真的很需要一些测试方面的帮助。
  • 表单没有进行任何验证。唯一真正的要求是电子邮件字段看起来像一个电子邮件。如果有人在没有添加电子邮件的情况下留下了回复,表单会静默失败。
  • 没有防止垃圾邮件或滥用的保护措施。
  • 代码的质量非常像是“我的第一个插件”,基于使用过时约定的示例。欢迎对样式提出任何建议。
  • 我喜欢将联系表单与标记为“contact”的主题相关联,但这很复杂,而且可能不必要。我正在考虑添加一个仅包含联系表单的新路由以简化操作。
  • 联系数据存储在数据库中,但查看联系人列表的管理员面板可能会很有用。
  • 表单已固定以满足我当前的要求,但能够灵活地选择提示哪些字段会很方便。

  1. 该设置默认为“contact@example.com”,但可以配置为接收真实邮件。 ↩︎

  2. 甚至可以回复联系表单,无论好坏。 ↩︎

13 个赞

这不起作用。你能更新一下 @jericson 吗?

对我来说是有效的。

1 个赞

这不是一个主题,而是一个插件。请参阅 https://meta.discourse.org/t/install-plugins-in-discourse/19157。

5 个赞

已安装。将我的电子邮件添加到了 contact_form_email,启用了 email_in,在 email_in 的允许组中添加了“everyone”,enable_staged_users。试用了表单,但我没有收到任何电子邮件。

2 个赞

好交易!如果您能告知是什么解决了问题,可能会对未来的读者有所帮助。

我猜不是将插件安装为主题:wink:

1 个赞

能否发布一些插件实际运行的截图?“联系表单”可以修改/配置吗?

1 个赞

当然!请看编辑后的帖子。

很遗憾不行。但欢迎提交拉取请求

1 个赞

很棒的插件。我猜欺骗的电子邮件地址不会显示给最终用户。

正确。我有一个另一个插件(比这个更粗糙)用于获取匿名评论。我使用 review@example.com 将这些消息路由到正确的目的地。它只是一个字符串。

1 个赞