Contact Forms

联系表单构建器:在页面中嵌入表单,保存每一条提交,并通过站点的服务商发送邮件。

插件

Contact Forms

联系表单构建器:在页面中嵌入表单,保存每一条提交,并通过站点的服务商发送邮件。

  • 分类: forms
  • 状态: 可用
  • 版本: 1.1.2
  • 价格: 未知
  • 来源: 官方插件注册表
  • 安装方式: 注册表沙盒插件
  • 核实日期: 2026-10-21

描述

在管理后台创建联系表单,用一个区块把它放到任何页面上,并在内置收件箱中查看每一条提交。通知邮件通过你的站点已在使用的服务商发送——插件本身从不直接连接任何邮件服务。

在线演示: emdashhq.com/contact — 由此插件在正式运行的 EmDash 站点上渲染的可用表单。

你将获得

  • 表单 — 创建和编辑表单,管理字段(text、email、tel、url、number、textarea、select、checkbox),调整字段顺序,无需删除即可启用或停用表单。
  • 提交收件箱 — 每条记录都保存在你站点的数据库中,并附带其来源页面;可按表单、状态或邮件结果筛选;标记为已读或归档;重新发送通知;复制为 CSV。
  • 邮件日志 — 每次发送尝试的状态、耗时和服务商返回的错误信息,让投递失败可以被诊断,而不是悄无声息。
  • 仪表盘小组件 — 未读数量、启用的表单和最近的提交。
  • 反垃圾 — 默认开启隐藏蜜罐、最短填写时间检测和按 IP 的每小时限制;被动检测不够用时,可选用 Cloudflare Turnstile。
  • 保留期限 — 可选择删除早于指定天数的提交和日志条目。

访客的地址绝不会出现在公开的表单定义中,表单的收件人也只会出现在管理后台。

安装

安装与第一个表单

  1. 在 EmDash 管理后台打开 Registry,搜索 Contact Forms,点击 Install。它会请求通过你站点的服务商发送邮件,并请求访问 challenges.cloudflare.com——只有开启 Turnstile 时才会用到该主机。
  2. 打开 Plugins → Contact forms → Settings,设置默认通知邮箱。当某个表单没有单独指定时,提交内容会发送到这里。
  3. 打开 Forms → New form。为它命名,给出一个 slug(例如 contact),然后添加字段。每个表单都可以单独指定收件人、主题模板、按钮文字和成功提示。
  4. 用 Contact form 区块把表单放到页面上,并填入 slug。如果你的主题尚未提供该区块,软件包的 site/ 目录中有两个需要复制的文件——用于 seed 的 block-type.json 和用于渲染的 ContactForm.astro;README 中有详细说明。
  5. 在 Settings → Email 中启用一个服务商并发送测试邮件。没有服务商时,提交内容仍会被保存——只是不会发送邮件,邮件日志会说明原因。

第一位访客提交后,提交内容就会出现在 Plugins → Contact forms → Submissions 和仪表盘小组件中。

常见问题

提交内容会去哪里?

保存到你站点自己的数据库,位于 Plugins → Contact forms → Submissions。不会向任何第三方发送数据——唯一的对外调用是通过你的服务商发送通知邮件,以及(如已启用)Turnstile 验证。

没有配置服务商时会发送邮件吗?

不会,这没有问题——提交内容仍会被保存,邮件状态为 skipped。在 Settings → Email 下启用服务商后,通知和访客确认邮件就会开始发送,邮件日志会记录每一次尝试。

它如何阻止垃圾信息?

三种被动防护始终开启:隐藏的蜜罐字段、最短填写时间检测,以及可在设置中调整的按 IP 每小时提交次数限制。如果这还不够,把 Cloudflare Turnstile 的站点密钥和私密密钥粘贴到插件设置中,每个表单在保存任何内容之前都会先经过验证。

访客能收到确认邮件吗?

可以。表单可以使用自己的主题模板向访客发送确认邮件。主题模板可以使用已提交字段中的值,对通知邮件的回复会发送到访客的邮箱字段。

我能把提交内容导出吗?

提交页面可以把当前筛选的视图复制为 CSV,经过身份验证的 export 路由也会提供同样的 CSV,供脚本或 API 令牌使用。

提交内容能自动删除吗?

在插件设置中设置 Keep submissions for (days)。计划任务会删除早于该期限的提交和邮件日志条目;0 表示全部保留。

公开表单会暴露收件人地址吗?

不会。公开的表单路由只返回字段、标签和选项——收件人和通知设置绝不会离开管理后台。

更新日志

1.1.2

  • 必填复选框现在会拒绝缺失或无效的值,而不是悄悄通过。
  • 在进行任何邮件处理之前先保存提交:如果服务商之后出错,该行会被标记为失败,但消息不会丢失,访客仍会收到已保存的响应。
  • 提交重试具有幂等性:由 slug、IP 和值生成的指纹可避免重复的行和重复的邮件。
  • 被拒绝的提交会通过一次性恢复记录,用逐字段错误信息重新填充表单。
  • Turnstile 验证有十秒的期限,并有可配置的故障策略(默认接受)。
  • 按 IP 的速率限制是原子的,并且先于 Turnstile 消耗其额度。
  • cf_ 字段键保留给提交协议使用,管理后台会拒绝它们。
  • CSV 导出和管理后台预览会中和电子表格公式注入。
  • 每小时清理现在还会清除过期的速率桶、恢复记录和幂等声明。
  • 文档:在线演示链接带有 UTM 参数。

1.1.1

  • 注册表列表新增了图标、横幅、截图、安装指南、常见问题和这份更新日志。插件本身没有变化。

1.1.0

  • 每个表单可选启用 Cloudflare Turnstile 验证:在插件设置中填入站点密钥和私密密钥,提交内容在保存前会被验证。
  • 新增 network:request 权限,仅限 challenges.cloudflare.com,用于该项检查。
  • 新增详细调试日志设置,在接入新的邮件服务商时很有用。

1.0.0

  • 首次发布。管理后台中的表单构建器(八种字段类型)、提交收件箱、邮件投递日志和仪表盘小组件。
  • 通过 ctx.email.send(),使用站点当前启用的服务商发送通知邮件和访客确认邮件。
  • 默认开启蜜罐、最短填写时间和按 IP 每小时的速率限制;可选的旧提交保留期清理。
  • 公开的 form 和 submit 路由,以及随 site/ 提供的 Contact form 页面区块。