# AWS SES 邮件配置指南

## 概述

系统已从 Nodemailer (SMTP) 迁移到 **AWS SES (Simple Email Service)**，提供更可靠、更高性能的邮件发送服务。

---

## 为什么使用 AWS SES？

| 特性 | Nodemailer (SMTP) | AWS SES |
|------|------------------|---------|
| **可靠性** | 依赖 SMTP 服务器 | 99.9% SLA |
| **送达率** | 取决于配置 | 优秀 |
| **维护成本** | 需要维护服务器 | 零维护 |
| **成本** | 服务器成本 | 按使用量付费 |
| **扩展性** | 受限于服务器 | 无限扩展 |
| **监控** | 需自建 | 内置 CloudWatch |

---

## IAM 最小权限策略

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ses:SendEmail",
        "ses:SendRawEmail"
      ],
      "Resource": "*"
    }
  ]
}
```

---

## 环境变量参考

| 变量 | 说明 | 示例 |
|------|------|------|
| `AWS_SES_REGION` | AWS SES 区域 | `us-west-2` |
| `AWS_ACCESS_KEY_ID` | AWS 访问密钥 ID | `AKIAIOSFODNN7EXAMPLE` |
| `AWS_SECRET_ACCESS_KEY` | AWS 访问密钥 Secret | `wJalrXUtnFEMI/...` |
| `AWS_SES_FROM_EMAIL` | 发件人邮箱（必须在 SES 中验证） | `noreply@ff.com` |
| `AWS_SES_FROM_NAME` | 发件人显示名称（可选） | `FFOA Platform` |
| `FRONTEND_URL` | 前端 URL（用于邮件中的链接） | `https://your-domain.com` |

---

## 发件人名称最佳实践

| 配置 | 收件人看到的发件人 |
|------|------------------|
| 只配置 `AWS_SES_FROM_EMAIL` | `noreply@ff.com` |
| 两者都配置 | `FFOA Platform <noreply@ff.com>` |

1. **使用清晰的名称**：让收件人一眼看出邮件来源
2. **保持一致性**：在所有邮件中使用相同的发件人名称
3. **避免特殊字符**：使用简单的字母、数字和空格
4. **考虑本地化**：根据用户语言使用中文或英文名称

---

## 成本估算

- **免费额度**: 每月 62,000 封邮件（从 EC2 发送）
- **超出免费额度**: $0.10 per 1,000 封邮件
- **附件存储**: $0.09 per GB

| 场景 | 每月邮件数 | 成本 |
|------|-----------|------|
| 小型团队 (50 人) | ~10,000 封 | **$0** (免费额度内) |
| 中型企业 (200 人) | ~50,000 封 | **$0** (免费额度内) |
| 大型企业 (1000 人) | ~200,000 封 | **$13.80/月** |

---

## 安全最佳实践

- 使用 IAM 用户（不要使用根账户）
- 定期轮换访问密钥
- 最小权限原则
- 使用环境变量存储密钥
- 不要将密钥提交到代码库

---

## 迁移清单

从 Nodemailer 迁移到 AWS SES 的完整清单：

- [x] 安装 AWS SDK: `@aws-sdk/client-ses`
- [x] 移除 Nodemailer 依赖
- [x] 重构 `email.adapter.ts`
- [x] 更新环境变量配置
- [x] 更新文档
- [ ] 配置 AWS SES 账户
- [ ] 验证发件人邮箱
- [ ] 测试邮件发送
- [ ] 申请移出沙箱（生产环境）
- [ ] 配置 CloudWatch 监控
- [ ] 部署到生产环境

---

## 相关文档

- [AWS SES 官方文档](https://docs.aws.amazon.com/ses/)
- [AWS SDK for JavaScript v3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/)
