跳到主内容

用于 Casdoor 验证码的邮件提供商:Brevo SMTP、Resend、SendGrid、ACS Email 和 SES

· 阅读时间:一分钟
Yang Luo
Casdoor Maintainer

Casdoor 通过邮件提供商发送注册验证码、密码重置链接和魔法链接。它支持 Resend、SendGrid 和 Azure Communication Services (ACS) Email 的原生 API 类型,一个适用于任何 SMTP 中继(您自己的服务器、Google Workspace、Microsoft 365、Brevo、Amazon SES)的 Default SMTP 类型,以及一个用于任何其他 HTTP API 的 Custom HTTP Email 类型。如果您希望有免费额度且设置简单,建议从 Resend 或 Brevo 开始。如果您已经在 AWS 或 Azure 上运行,SES 或 ACS 可以将计费集中在一个地方。无论您选择哪一个,送达率的工作都是一样的:需要一个 SPF 和 DKIM 与发件地址一致的发件域名。

选项概览​

免费额度和价格于 2026-11-02 在各供应商的定价页面进行了核实。

提供商API 或 SMTP免费额度(2026-11-02 核实)发件域名设置Casdoor 类型
您自己的邮件服务器SMTP由您自行管理您需要发布 SPF、DKIM 和 DMARC 记录,并为 IP 配置正向和反向 DNSDefault
Google Workspace (smtp.gmail.com)使用应用密码的 SMTPWorkspace 订阅的一部分,每天 2,000 封消息您的 Workspace 域名Default
Microsoft 365 (smtp.office365.com)SMTP AUTH订阅的一部分您的 Microsoft 365 域名Default
BrevoSMTP 中继 (smtp-relay.brevo.com)每天 300 封邮件Brevo 代码 (TXT)、DKIM 和 DMARC 记录Default
ResendAPI每月 3,000 封邮件,每天 100 封Resend 生成的 SPF 和 DKIM 记录,然后配置 DMARCResend
SendGridAPI60 天试用,每天 100 封邮件域名验证:SPF 和 DKIM 的 CNAME 记录,DMARC 的 TXT 记录SendGrid
Azure Communication Services EmailAPI未列出;每封邮件 $0.00025 加上每 MB $0.00012Azure 管理的子域名,或带有 SPF 和 DKIM 的自定义域名Azure ACS
Amazon SESSMTP 接口无仅 SES 配额;新的 AWS 账户获得可用于 SES 的免费层积分每个发件地址都需要经过验证的身份Default
任何其他 HTTP APIHTTP取决于服务取决于服务Custom HTTP Email

文档中的邮件提供商概览列出了相同的类型及其使用的字段。

SMTP:您自己的服务器、Google Workspace、Microsoft 365​

Default 类型接受主机、端口、用户名和密码。SSL mode 设置为 Auto 时,在端口 465 上使用隐式 TLS,在其他端口上使用 STARTTLS,这涵盖了下面几乎所有的中继服务。

使用您自己的服务器时,SPF、DKIM 签名、反向 DNS 和 IP 信誉都由您负责。Google 要求发送 IP 具有有效的正向和反向 DNS (PTR) 记录。

Google Workspace 文档说明 smtp.gmail.com 使用端口 465 或 587,需使用完整的 Workspace 地址和应用密码登录,限制为每天 2,000 封消息。

Microsoft 365 是新设置中应避免的选择。Casdoor 的 SMTP 提供商使用用户名和密码登录,这属于 SMTP AUTH 的基本身份验证。Microsoft 已宣布计划弃用 Exchange Online 中 SMTP AUTH 的基本身份验证,并且已在未使用该功能的租户中关闭了 SMTP AUTH。在基于此构建之前,请查看下方公告中的最新时间表。

Brevo SMTP​

Brevo 通过标准 SMTP 中继发送事务性邮件,因此使用 Default 类型。大多数设置问题源于 Brevo SMTP 登录凭证:

  • 服务器是 smtp-relay.brevo.com,端口为 587、465 或 2525。端口 465 需要 SSL,Auto 模式可以处理这一点。
  • SMTP 登录名并不总是您的账户邮箱。根据账户创建的时间,它可能是您的登录邮箱,也可能是像 [ID]@smtp-brevo.com 这样的生成地址,并在 Brevo 的 SMTP 页面显示。更改您的账户邮箱不会改变它。
  • 密码是 SMTP key,而不是 API key。

在 Casdoor 中,将 Type 设置为 Default,并将这些值填入 Host、Port、Username 和 Password。Brevo 指南包含截图。对于域名,Brevo 需要其自己的 TXT 验证记录、DKIM 和 DMARC;SPF 仅在使用专用 IP 时才需要。

Resend​

Resend 类型只需要在 Secret key 中填写 API key,以及在已验证域名上的 From address。请留空 Host、Port 和 Username。Casdoor 根据 From name 将发件人格式化为 Name <address>,如果 From name 为空,则使用组织的显示名称。

测试前需要了解两点。首先,共享的 onboarding@resend.dev 发件人只能发送到您自己的 Resend 账户邮箱地址;其他任何收件人都会收到 403 错误。其次,验证您自己的域名意味着添加 Resend 生成的 SPF 和 DKIM 记录,且 Resend 建议从子域名发送邮件以保持其信誉独立。免费计划每月覆盖 3,000 封邮件,每日上限为 100 封;Pro 计划起价为每月 $20,涵盖 50,000 封。请参阅 Resend 指南。

SendGrid​

SendGrid 类型使用 API key。留空 Host 和 Endpoint,Casdoor 将使用 SendGrid 的标准发送 API;仅当您需要不同的端点时才填写两者。Casdoor 将除 202 Accepted 以外的任何响应视为失败,并显示 SendGrid 返回的错误消息,这有助于排查发件人尚未验证的情况。

SendGrid 的定价页面列出了为期 60 天的免费试用,每天 100 封邮件,之后 Essentials 套餐起价为每月 $19.95。带有自动安全性的域名认证会为 SPF 和 DKIM 添加 CNAME,并为 DMARC 添加 TXT 记录。请参阅 SendGrid 指南。

ACS Email (Azure Communication Services)​

Azure ACS 类型将资源端点作为 Host,访问密钥作为 Secret key;Casdoor 使用该密钥对每个请求进行签名。Azure 为您提供一个一键管理的子域(位于 azurecomm.net 下),其中身份验证已设置好,Microsoft 建议在开发期间使用它,并在上线时切换到自定义域名及其 SPF 和 DKIM 记录。定价页面上没有免费层级:每封邮件 $0.00025,外加每 MB 传输量 $0.00012。请参阅 Azure ACS 指南。

Amazon SES​

Casdoor 没有 SES API 类型,因此请使用 Default 类型的 SES SMTP 接口。主机是该区域的 SMTP 端点,例如 email-smtp.us-east-1.amazonaws.com;SES 在端口 25、587 或 2587 上接受 STARTTLS,在端口 465 或 2465 上接受隐式 TLS。SMTP 用户名和密码是在 SES 中生成的 SMTP 凭据。它们不是您的 AWS 访问密钥,并且在不同区域中是不同的。

新账户在 SES 沙箱中启动:邮件仅发送至已验证的地址,每 24 小时最多 200 条消息,每秒一条。请在真实用户注册之前申请生产访问权限。SES 按标准费率收取每 1,000 封出站邮件 $0.10 的费用,无最低费用。

自定义 HTTP 电子邮件​

对于没有原生类型的服务,Custom HTTP Email 会将 fromAddress、fromName、toAddress(或多个收件人的 toAddresses)、subject 和 content 作为表单或 JSON 主体发送,并带有您定义的标头。您可以重命名每个字段以匹配目标 API。Casdoor 仅将 HTTP 200 视为成功,因此回答 202 Accepted 的 API 会显示为错误;在前面添加一个小适配器即可解决此问题。请参阅 通过您自己的 HTTP API 发送邮件。

身份验证邮件的可送达性基础​

如果验证码落入垃圾邮件箱,那就毫无用处。重要的规则如下:

  • SPF 和 DKIM。 Google 要求所有向 Gmail 发送邮件的发件人使用 SPF 或 DKIM。当日发送量超过 5,000 条时,Google 要求同时使用两者,以及 DMARC(接受 p=none 策略)。从一开始就设置这三项。
  • 对齐(Alignment)。 From 标头中的域名必须与 SPF 域名或 DKIM 域名匹配,否则 DMARC 检查会失败。这就是为什么每个提供商都要求您验证发送域名的原因。
  • 独立的子域名。 Yahoo 建议通过 IP 或 DKIM 域名将交易性邮件与营销邮件分开,Resend 也建议使用子域名。类似 auth.example.com 的子域名可以防止糟糕的新闻通讯影响您的密码重置邮件。
  • TLS 和垃圾邮件率。 Google 要求使用 TLS,并要求您将报告的垃圾邮件率保持在 0.3% 以下,理想情况下低于 0.1%。
  • 不需要退订标头。 Google 的常见问题解答指出,一键退订适用于营销邮件,并将密码重置消息列为被排除的交易性邮件示例。
  • 简单内容。 对于所有内置类型,Casdoor 将模板作为一个 HTML 主体发送,没有单独的纯文本部分。保持 HTML 轻量,将代码放在纯文本中,并在按钮旁边以文本形式显示完整链接,就像 Casdoor 内置的魔法链接邮件那样。直接使用您的 Casdoor 源站,而不是链接缩短器,以便链接域名与您的品牌匹配。

在 Casdoor 中配置和测试提供商​

  1. 前往 Identity > Providers,添加一个提供商,将 Category 设置为 Email,并从上面的表格中选择 Type。
  2. 设置 From address,并可选地设置 From name。
  3. Write Email title and Email content. The content can use %s for the code, %{user.friendlyName} for the user's name, and %link inside a <reset-link> block for the password reset link. Magic link emails use %link and %expireTime; if your content has no %link, Casdoor sends its own magic link email instead. The templates section has examples. Codes and magic links expire after verificationCodeTimeout in conf/app.conf, which defaults to 10 minutes and matches the default template text; if you change the timeout, change the wording in your template too.
  4. 点击 Test SMTP Connection 以在不发送邮件的情况下建立连接(仅限 SMTP 类型),然后在 Test Email 中输入地址并点击 Send Testing Email。测试使用表单中的值(无论是否保存),其中 %s 被替换为 123456,并且重置链接块被移除。
  5. 使用 Signup、Forget Password、Magic link 或 All 等规则将提供商添加到应用。你可以为不同的规则使用不同的提供商。请参阅 向应用添加提供商。
  6. 在 conf/app.conf 中设置 origin。如果不设置,除非请求来自 localhost 等回环主机,否则 Casdoor 不会在密码重置邮件中包含重置链接,并会拒绝发送魔术链接。请参阅 使用魔术链接登录。

对于本地开发,请将 Default 提供商指向一个模拟 SMTP 服务器而不是真实账户;MailHog vs Mailpit 介绍了相关设置。

参考资料​