LogoLaunchSaaS

电子邮件

配置邮件提供商用于事务性邮件

电子邮件

LaunchSaaS 支持多个邮件提供商,具有可扩展的架构。你可以轻松切换提供商、添加自定义实现或完全禁用邮件功能。

支持的提供商

  • Resend - 现代邮件 API,支持 React 邮件模板
  • Custom - 使用你自己的邮件提供商扩展

配置

src/configuration/features.ts 中配置你的邮件提供商:

export const features: Features = {
  email: {
    provider: "resend", // "resend" | "disabled"
  },
  // ... 其他功能
};

设置 Resend

1. 创建 Resend 账户

  1. resend.com 注册
  2. 验证你的电子邮件地址
  3. 免费套餐每天可发送 100 封邮件

2. 获取 API 密钥

  1. 在 Resend Dashboard 中前往 API Keys
  2. 点击 "Create API Key"
  3. 给它一个名称(例如 "LaunchSaaS")
  4. 添加到你的 .env 文件:
RESEND_API_KEY="re_..."

3. 配置发件人电子邮件

对于开发环境,使用 Resend 测试电子邮件:

RESEND_FROM_EMAIL="[email protected]"

对于生产环境,你需要验证你的域名(见下文)。

如果你正在设置环境,现在可以返回环境设置指南继续。

域名验证(生产环境)

要从你自己的域名发送电子邮件:

1. 添加域名

  1. 在 Resend Dashboard 中前往 Domains
  2. 点击 "Add Domain"
  3. 输入你的域名(例如 yourdomain.com

2. 添加 DNS 记录

Resend 将提供要添加的 DNS 记录:

  • MX 记录 - 用于接收退信
  • TXT 记录 - 用于域名验证(SPF、DKIM)

将这些记录添加到你的 DNS 提供商(例如 Cloudflare、Namecheap)。

3. 验证域名

  1. 等待 DNS 传播(最多可能需要 48 小时)
  2. 在 Resend Dashboard 中点击 "Verify"
  3. 验证后,更新你的环境变量:
RESEND_FROM_EMAIL="[email protected]"

电子邮件模板

电子邮件模板位于 src/components/email/,支持国际化(i18n):

模板描述
email-verification.tsx用户注册时发送
reset-password.tsx密码重置流程
magic-link.tsx无密码登录
payment-completed.tsx支付确认
welcome.tsx验证后的欢迎邮件

i18n 支持

电子邮件模板自动使用用户的首选语言(存储在用户表的 locale 字段中)。语言按以下顺序确定:

  1. 用户保存的语言偏好(来自用户资料)
  2. 请求中的语言(通过 next-intl 设置的 NEXT_LOCALE cookie)
  3. 默认语言(en

电子邮件翻译定义在 messages/[locale].jsonEmail 命名空间下:

{
  "Email": {
    "hello": "你好,{name}",
    "emailVerification": {
      "title": "验证你的邮箱",
      "heading": "邮箱验证",
      "action": "验证邮箱",
      "content": "请点击下面的按钮验证你的电子邮件地址。"
    }
  }
}

自定义模板

每个模板组件接收 name(用户名)和 t(翻译函数)作为 props:

import type { EmailTemplateProps } from "@/lib/features/email/template";

export function EmailVerificationTemplate({ name, t }: EmailTemplateProps) {
  return (
    <>
      <p>{t("hello", { name })}</p>
      <p>{t("emailVerification.content")}</p>
    </>
  );
}

模板编排由 src/lib/features/email/template.ts 处理,使用 @daveyplate/better-auth-ui/server 提供一致的邮件样式。

自定义邮件提供商

要添加自定义邮件提供商:

  1. rc/lib/email/providers/ 中创建实现 Provider 接口的新提供商类
  2. src/lib/email/factory.ts 中注册
  3. 添加到 src/schemas/site-configuration.ts 中的 Features 类型

示例:

import { Provider, SendEmailOptions, SendEmailResult } from "../provider";

export class CustomEmailProvider implements Provider {
  async sendEmail(options: SendEmailOptions): Promise<SendEmailResult> {
    // 实现邮件发送逻辑
    return { success: true };
  }
}

在工厂中注册:

case "custom":
  return new CustomEmailProvider();

禁用邮件

要禁用邮件功能(例如用于本地开发):

export const features: Features = {
  email: {
    provider: "disabled",
  },
};

禁用时,系统使用无操作提供商,将邮件记录到控制台而不是发送。

参考资料

下一步