Gemini Omni Editor 文档
邮件

邮件系统

基于 Zoho ZeptoMail 的交易邮件。

概述

Sistine Starter 使用 Zoho ZeptoMail HTTPS API 发送交易邮件。所有邮件逻辑在 lib/email.ts 中;Newsletter 订阅状态继续保存在本地数据库。

邮件类型

邮件触发条件模板
验证邮件用户注册lib/email.ts 中的内联 HTML
密码重置忘记密码请求lib/email.ts 中的内联 HTML
欢迎邮件邮箱验证完成后内联
购买确认支付 webhook内联
订阅到期提醒到期前数天内联
积分不足提醒余额低于阈值内联

配置

ZEPTOMAIL_SEND_MAIL_TOKEN="your-zeptomail-send-mail-token"
ZEPTOMAIL_BASE_URL="https://api.zeptomail.com.cn/v1.1"
ZEPTOMAIL_SENDER_EMAIL="Your App <noreply@mail.yourdomain.com>"

开发模式

ZeptoMail 不提供开发环境兜底发件人。所有环境都应验证发信域名/Mail Agent 并使用其发件人地址;Send Mail Token 只能保存在服务端。

生产环境

生产环境需按 ZeptoMail 提供的 DNS 记录完成域名验证,创建 Mail Agent,并将 ZEPTOMAIL_SENDER_EMAIL 设置为已验证域名下的发件人。

邮件模板

当前认证和通知邮件使用 lib/email.ts 中的内联 HTML。传输层也支持通过 sendEmail({ react }) 传入 React 元素,在调用 ZeptoMail 前渲染;emails/ 目录中的可复用组件可由显式调用方使用:

// emails/verification-email.tsx
import { Html, Body, Text, Link } from '@react-email/components';

export default function VerificationEmail({ url }: { url: string }) {
  return (
    <Html>
      <Body>
        <Text>点击下方链接验证邮箱:</Text>
        <Link href={url}>验证邮箱</Link>
      </Body>
    </Html>
  );
}

错误处理

所有邮件发送都包裹在 try-catch 中。发送失败会记录日志但不会导致应用崩溃。系统返回 { success, data, error } 结果而非抛出异常:

const result = await sendVerificationEmail(email, token);
if (!result.success) {
  // 处理服务商错误,但不要暴露凭据。
}

On this page