open-saas 如何把邮件发送从 Dummy 提供方切换到 SendGrid 或 Mailgun 用于邮箱验证和密码重置
【免费下载链接】open-saasA 100% free modern JS SaaS boilerplate (React, NodeJS, Prisma). Full-featured: Auth (email, google, github, slack, MS), Email sending, Background jobs, Landing page, Payments (Stripe, Polar.sh), Shadcn UI, S3 file upload. AI-ready with tailored AGENTS.md, skills, and Claude Code plugin. One cmd deploy. Powered by Wasp full-stack framework.项目地址: https://gitcode.com/GitHub_Trending/op/open-saas
open-saas 模板默认使用Dummy邮件提供方:它不真正发送邮件,而是把邮箱验证链接/令牌打印到服务端控制台,方便本地开发时手动点击完成注册。这个限制在上线前必须解决——根据 邮件发送指南 和 认证指南,使用Dummy提供方时应用无法执行生产构建,只有切换到 SendGrid 或 Mailgun 这类生产就绪的提供方后,邮箱验证和密码重置邮件才会真实发出。本文基于当前模板的实际代码结构,给出这条切换路径和验证方式。
Dummy 提供方在哪里、行为是什么
当前模板中,邮件配置独立在一个文件里:emailSender.wasp.ts。
export const emailSender: EmailSender = { // NOTE: "Dummy" provider is just for local development purposes. // Make sure to check the server logs for the email confirmation url (it will not be sent to an address)! // Once you are ready for production, switch to e.g. "SendGrid" or "Mailgun" providers. provider: "Dummy", defaultFrom: { name: "Open SaaS App", // When using a real provider, e.g. SendGrid, you must use the same email address that you configured your account to send out emails with! email: "me@example.com", }, };该对象由 main.wasp.ts 导入后挂在应用的emailSender字段上,与指南中app.emailSender指的是同一份配置——只是当前模板(Wasp 2 写法)把它拆到了单独文件,而不是指南示例里的main.wasp内联写法。
认证侧的接线在 auth.wasp.ts:email是默认认证方式,其emailVerification和passwordReset两项分别绑定了邮件内容函数:
const emailAuthMethod: NonNullable<AuthMethods["email"]> = { fromField: { name: "Open SaaS App", email: "me@example.com", }, emailVerification: { clientRoute: "EmailVerificationRoute", getEmailContentFn: getVerificationEmailContent, }, passwordReset: { clientRoute: "PasswordResetRoute", getEmailContentFn: getPasswordResetEmailContent, }, userSignupFields: getEmailUserFields, };两封邮件的实际内容由 emails.ts 生成:验证邮件主题为Verify your email,正文包含verificationLink;重置邮件主题为Password reset,正文包含passwordResetLink。点击后分别落到/email-verification和/password-reset路由。只要提供方配置正确,Wasp 会自动让 AuthUI 组件使用真实的发信通道,无需改动认证流程代码。
切换到 SendGrid
- 注册 SendGrid 账号,在其控制台的 API Keys 设置页创建并复制你的 API key(
.env.server.example中的注释也指向同一入口)。 - 把 key 写入
.env.server文件的SENDGRID_API_KEY变量。模板自带 .env.server.example 作为参照,其中已包含该变量:
SENDGRID_API_KEY=<你的 SendGrid API key>- 修改 emailSender.wasp.ts:
provider改为"SendGrid",并把defaultFrom.email改成你 SendGrid 账号中配置的发信地址:
export const emailSender: EmailSender = { provider: "SendGrid", defaultFrom: { name: "Open SaaS App", // Same email address you configured your SendGrid account to send emails with! email: "you@yourdomain.com", // 替换为你在 SendGrid 中配置的发信地址 }, };- 同步修改 auth.wasp.ts 中
emailAuthMethod.fromField.email,使用同一个发信地址。
指南对此有明确警告:使用 SendGrid 时,from地址必须与你在 SendGrid 账号中配置的发信地址一致,否则发信会失败。这是 SendGrid 与 Mailgun 两条路径共同的要求。
切换到 Mailgun(替代路径)
如果你的账号在 Mailgun 而不是 SendGrid,流程类似,只是多一个发信域名变量:
- 创建 Mailgun 账号,在 API Keys 设置页创建新的 API key,写入
.env.server的MAILGUN_API_KEY。 - 在 Mailgun 的 Domains 设置页创建(并验证)一个发信域名,写入
.env.server的MAILGUN_DOMAIN。 - emailSender.wasp.ts 中
provider改为"Mailgun",defaultFrom.email与 auth.wasp.ts 中fromField.email同样改成你的 Mailgun 发信地址。
MAILGUN_API_KEY=<你的 Mailgun API key> MAILGUN_DOMAIN=<你的 Mailgun 发信域名>模板的.env.server.example目前只列出了SENDGRID_API_KEY示例;Mailgun 的两个变量按指南要求直接加到.env.server即可。
验证切换是否生效
本地开发验证:启动应用后用一个新邮箱注册。
- 切换前(Dummy):收件箱不会收到任何邮件,验证链接/令牌只会出现在服务端日志里,需要手动从日志复制后打开完成验证——这是 认证指南 描述的行为。
- 切换后(SendGrid/Mailgun):收件箱应收到主题为
Verify your email的邮件,点击链接进入邮箱验证页完成验证;随后走一次忘记密码流程,应收到主题为Password reset的邮件,点击链接进入密码重置页完成重置。
生产构建验证:两份文档都明确 Dummy 提供方下应用无法构建,因此切换到 SendGrid 或 Mailgun 后生产构建能够完成,本身就是一项成功判定。
限制与边界
email认证方式依赖邮件提供方,Dummy 仅用于本地开发,不能用于生产。- 两处发件地址(
emailSender.defaultFrom.email与emailAuthMethod.fromField.email)都要与提供方账号中配置的发信地址保持一致,指南和源码注释均强调了这一点。 - 指南末尾提示:如需了解其他提供方(如 SMTP)的细节,可查阅 Wasp 官方的邮件文档,指南原文给出了对应链接。
【免费下载链接】open-saasA 100% free modern JS SaaS boilerplate (React, NodeJS, Prisma). Full-featured: Auth (email, google, github, slack, MS), Email sending, Background jobs, Landing page, Payments (Stripe, Polar.sh), Shadcn UI, S3 file upload. AI-ready with tailored AGENTS.md, skills, and Claude Code plugin. One cmd deploy. Powered by Wasp full-stack framework.项目地址: https://gitcode.com/GitHub_Trending/op/open-saas
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考