电子邮件
配置邮件提供商用于事务性邮件
电子邮件
LaunchSaaS 支持多个邮件提供商,具有可扩展的架构。你可以轻松切换提供商、添加自定义实现或完全禁用邮件功能。
支持的提供商
- Resend - 现代邮件 API,支持 React 邮件模板
- Custom - 使用你自己的邮件提供商扩展
配置
在 src/configuration/features.ts 中配置你的邮件提供商:
export const features: Features = {
email: {
provider: "resend", // "resend" | "disabled"
},
// ... 其他功能
};设置 Resend
1. 创建 Resend 账户
- 在 resend.com 注册
- 验证你的电子邮件地址
- 免费套餐每天可发送 100 封邮件
2. 获取 API 密钥
- 在 Resend Dashboard 中前往 API Keys
- 点击 "Create API Key"
- 给它一个名称(例如 "LaunchSaaS")
- 添加到你的
.env文件:
RESEND_API_KEY="re_..."3. 配置发件人电子邮件
对于开发环境,使用 Resend 测试电子邮件:
RESEND_FROM_EMAIL="[email protected]"对于生产环境,你需要验证你的域名(见下文)。
如果你正在设置环境,现在可以返回环境设置指南继续。
域名验证(生产环境)
要从你自己的域名发送电子邮件:
1. 添加域名
- 在 Resend Dashboard 中前往 Domains
- 点击 "Add Domain"
- 输入你的域名(例如
yourdomain.com)
2. 添加 DNS 记录
Resend 将提供要添加的 DNS 记录:
- MX 记录 - 用于接收退信
- TXT 记录 - 用于域名验证(SPF、DKIM)
将这些记录添加到你的 DNS 提供商(例如 Cloudflare、Namecheap)。
3. 验证域名
- 等待 DNS 传播(最多可能需要 48 小时)
- 在 Resend Dashboard 中点击 "Verify"
- 验证后,更新你的环境变量:
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 字段中)。语言按以下顺序确定:
- 用户保存的语言偏好(来自用户资料)
- 请求中的语言(通过 next-intl 设置的
NEXT_LOCALEcookie) - 默认语言(
en)
电子邮件翻译定义在 messages/[locale].json 的 Email 命名空间下:
{
"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 提供一致的邮件样式。
自定义邮件提供商
要添加自定义邮件提供商:
- 在
rc/lib/email/providers/中创建实现Provider接口的新提供商类 - 在
src/lib/email/factory.ts中注册 - 添加到
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",
},
};禁用时,系统使用无操作提供商,将邮件记录到控制台而不是发送。