SiteKit

如何设置 SendGrid 联系表单邮件服务

Last updated: April 10, 2026

为什么需要 SendGrid?

当有人填写你的联系表单时,网站需要一种方式来发送邮件 — 一封发给你(通知邮件),一封发给客户(确认邮件)。SendGrid 是一个可靠的邮件发送服务,专门处理这类需求。

免费套餐:每天 100 封邮件,对于大多数小型企业的联系表单来说完全够用。

只有在 SiteKit 中选择了联系表单功能时才需要设置。 如果你的网站没有联系表单,可以跳过本指南。

第 1 步:创建 SendGrid 账号

  1. 前往 sendgrid.com,点击 Start for Free
  2. 填写你的信息并创建账号
  3. 验证你的邮箱地址

第 2 步:验证你的发件域名

这是最重要的一步。如果不进行域名验证,你的邮件会被归入垃圾邮件。

  1. 在 SendGrid 中,进入 Settings > Sender Authentication
  2. 点击 Authenticate Your Domain
  3. 选择你的 DNS 服务商。如果你的域名在 Cloudflare 上,选择 Cloudflare
  4. 输入你的域名(例如 yourbusiness.com
  5. SendGrid 会提供 3 条 CNAME 记录供你添加

添加 DNS 记录

前往 Cloudflare 控制台 > 你的域名 > DNS

  1. 添加 SendGrid 提供的 3 条 CNAME 记录
  2. 同时添加以下 TXT 记录:

SPF 记录:

  • Type:TXT
  • Name:@
  • Value:v=spf1 include:sendgrid.net ~all

DMARC 记录:

  • Type:TXT
  • Name:_dmarc
  • Value:v=DMARC1; p=none; rua=mailto:your-email@yourdomain.com

为什么需要这么多 DNS 记录? SPF 告诉邮件服务器 SendGrid 有权代表你的域名发送邮件。DKIM(即那些 CNAME 记录)添加了数字签名。DMARC 将两者关联起来。如果缺少这些记录,邮件会被标记为垃圾邮件或直接被拒收。

  1. 回到 SendGrid 点击 Verify。DNS 变更通常需要几分钟才能生效。

第 3 步:生成 API 密钥

  1. 在 SendGrid 中,进入 Settings > API Keys
  2. 点击 Create API Key
  3. 为它起个名字(例如”Contact Form”)
  4. 选择 Full Access(或至少选择 Mail Send 权限)
  5. 点击 Create & View
  6. 立即复制 API 密钥 — 之后你将无法再次查看

第 4 步:添加环境变量

在你的 Cloudflare Pages 控制台中:

  1. 进入你的 Pages 项目 > Settings > Environment variables
  2. Production 环境中添加以下变量:
变量名 示例
SENDGRID_API_KEY 第 3 步获取的 API 密钥 SG.xxxxx...
CONTACT_EMAIL 你希望接收表单提交的邮箱 info@yourbusiness.com
FROM_EMAIL 邮件的”发件人”地址 noreply@yourbusiness.com
  1. 点击 Save
  2. 触发一次新部署(推送一个提交或在 Cloudflare 中点击 Retry deployment

第 5 步:测试联系表单

  1. 访问你的线上网站
  2. 用你自己的邮箱填写联系表单
  3. 提交表单
  4. 检查你的收件箱:
    • 企业通知邮件 — 应该发送到你的 CONTACT_EMAIL
    • 客户确认邮件 — 应该发送到你在表单中填写的邮箱

也检查一下垃圾邮件文件夹。 如果邮件进了垃圾邮件,可能是你的 DNS 记录尚未完全生效。等待一小时后再试。

常见问题排查

邮件完全没有收到

  • 仔细检查 Cloudflare 中的 SENDGRID_API_KEY 环境变量
  • 确保 SendGrid 中的域名验证状态显示为已验证
  • 在 Cloudflare Pages 控制台中查看函数日志是否有错误(在项目下的 Functions 中查看)

邮件进入垃圾邮件

  • 确认所有 DNS 记录都已配置(SPF、DKIM、DMARC)
  • 使用已验证域名下的真实”发件人”地址(不要用 gmail.com 地址)
  • DNS 变更最多可能需要 48 小时才能完全生效

表单在本地可以使用但在生产环境中不行

  • 环境变量可能未设置。检查 Cloudflare Pages > Settings > Environment variables
  • CORS 可能拦截了请求。检查 functions/api/contact.js 中允许的来源是否包含你的域名