联系表单

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

功能

启用后,Contact Form 插件会在任何标记为 contact 的主题顶部放置一个联系表单。通过表单提交的数据将发送至配置为从 contact_form_email 接收邮件的分类或群组。[1] 与传统联系表单类似,提交时无需拥有网站账户。

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

请注意,这是一个常规帖子,您可以在正文中包含任何您希望添加的说明。[2] 目前字段名称是硬编码的,且未进行真正的验证,但请参阅下方的 TODO 部分。消息发送后,将出现在配置群组的消息流中:

根据邮件通知的配置方式,配置群组的成员也可能收到来自 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. 选择您希望允许添加联系表单的群组(通常是“员工”或“管理员”),然后保存该标签组。

更新日志

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

待办事项

  • 我希望设置测试,确保在修改时不会破坏任何功能。我特别希望验证没有账户的用户是否可以提交数据。
  • 在测试过程中,我发现了一个严重的数据泄露问题。我已移除了该特定漏洞,但非常需要一些帮助来进行测试。
  • 表单未进行任何验证。唯一真正的要求是邮箱字段看起来像一个邮箱地址。如果某人未填写邮箱就提交回复,表单将静默失败。
  • 目前没有防垃圾邮件或滥用的保护机制。
  • 代码质量非常接近“我的第一个插件”,基于使用了过时约定的示例。欢迎任何关于代码风格的建议。
  • 我喜欢将联系表单与标记为“联系”的主题关联,但这很复杂且可能没有必要。我正在考虑添加一个新的路由,仅用于联系表单以简化操作。
  • 联系数据存储在数据库中,但如果有一个管理面板来查看联系人列表可能会更有帮助。
  • 表单目前固定符合我的当前需求,但如果能灵活设置提示字段将会非常有用。

  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 个赞

我最近更新了 该插件,因为它在较新版本的 Discourse 上无法正常运行。

4 个赞