邮件发送
结构
邮件模板在 apps/email/,API 的 apps/api/lib/email.ts 提供验证邮件、密码重置和验证码的发送函数。模板导出同时生成 HTML 与纯文本,所有发送经过 sendEmail()。
sh
bun email:dev
bun email:build
bun email:export模板预览默认使用 3001 端口。构建先生成邮件包,再让接口引用;根目录 bun build 已按依赖处理。
两种发送模式
完整本地预览捕获 Resend 请求,将记录写入被忽略的 .local/outbox.jsonl,不调用真实发送接口。bun dev 和线上 Worker 使用真实 Resend。
真实发送需要有效 RESEND_API_KEY、RESEND_EMAIL_FROM 和已验证发信域。先测试普通邮箱、垃圾邮件和退信,再验证认证链接;不要把本地捕获成功当成投递成功。
新增模板
创建模板并从邮件包导出,在 API 增加对应封装,传入站点品牌和正确网址。模板要有纯文本版本,链接地址从可信配置派生,不接受任意外部回跳地址。
组织邀请尚未配置发送回调,需要增加模板和插件衔接后再验收。通知、营销邮件与退订管理也不是现有事务邮件自动具备的能力。
排查
先确认运行模式,再检查配置、模板构建、发送返回错误和投递记录。sendEmail() 验证所有收件人;服务返回错误会继续抛出,调用方需要显示或处理失败。
邮箱、验证码和重置链接属于敏感记录,本地排查后不提交收件箱文件;生产日志不能打印完整验证码或认证链接。