# 邮件登录模块配置清单

## 一、已配置项 ✅

### 1. 开发环境配置（application-dev.properties）
- ✅ `tencent.ses.secret-id` - SecretID（已配置）
- ✅ `tencent.ses.secret-key` - SecretKey（已配置）
- ✅ `tencent.ses.region` - 服务区域（ap-beijing）
- ✅ `tencent.ses.from-email` - 发信地址（noreply@vionow.com）
- ✅ `tencent.ses.from-name` - 发件人名称（AIGC平台）
- ✅ `tencent.ses.template-id` - 模板ID（当前为0，开发模式）

### 2. 代码实现
- ✅ 邮箱验证码登录接口（`/api/auth/login/email`）
- ✅ 发送验证码接口（`/api/verification/email/send`）
- ✅ 验证码服务（VerificationCodeService）
- ✅ 腾讯云SES邮件服务（TencentSesMailService）
- ✅ 前端登录页面（Login.vue）
- ✅ 用户名密码登录已禁用

---

## 二、需要检查/更新项 ⚠️

### 1. 腾讯云SES服务权限检查 ⚠️ **重要**

**当前配置的账号信息：**
- 主账号ID: `100040185043`
- 用户名: `test`
- SecretID: `AKIDXw8HBtNfjdJm480xljV4QZUDi05wa0DE`
- SecretKey: `tZyHMDsKadS4ScZhhU3PYUErGUVIqBIB`

**需要确认：**
- [ ] **SecretID/SecretKey 是否有效**
  - 检查密钥是否过期或被撤销
  - 访问：https://console.cloud.tencent.com/cam/capi

- [ ] **是否有SES服务访问权限**
  - 子账号需要有SES（邮件推送）服务的访问权限
  - 如果没有权限，需要在主账号中授权

**检查步骤：**
1. 登录腾讯云控制台
2. 进入"访问管理" → "API密钥管理"
3. 检查密钥状态
4. 检查子账号权限策略

---

### 2. 发信地址验证 ⚠️ **重要（生产环境必需）**

**当前配置：**
- 发信地址: `noreply@vionow.com`

**需要操作：**
- [ ] **确认发信地址是否已验证**
  - 访问：https://console.cloud.tencent.com/ses/address
  - 检查 `noreply@vionow.com` 的状态
  - 如果状态为"未验证"或"验证失败"：

**验证步骤：**
1. 进入SES控制台 → "发信地址"
2. 点击"创建发信地址"或编辑现有地址
3. 输入邮箱：`noreply@vionow.com`
4. 腾讯云会发送验证邮件到该邮箱
5. 点击邮件中的验证链接完成验证
6. 确认状态变为"已验证"

**注意：**
- ⚠️ 只有验证通过的邮箱才能发送邮件
- ⚠️ 开发模式（template-id=0）不需要验证也能测试，但不会实际发邮件
- ⚠️ 生产模式必须有已验证的发信地址

---

### 3. 邮件模板配置 ⚠️ **生产环境必需**

**当前状态：**
- `template-id=0` - 开发模式

**开发模式特点：**
- ✅ 不会实际发送邮件
- ✅ 验证码在日志中显示
- ✅ 适合本地测试

**生产环境需要：**
- [ ] **创建邮件模板**

**创建步骤：**
1. 访问：https://console.cloud.tencent.com/ses/template
2. 点击"创建模板"
3. 选择模板类型（触发邮件或批量邮件）
4. 填写模板内容，例如：
   ```
   您的AIGC平台验证码是：{{code}}
   验证码有效期5分钟，请勿泄露给他人。
   如果不是您本人操作，请忽略此邮件。
   ```
5. 使用 `{{code}}` 作为验证码变量（必须使用这个变量名）
6. 提交审核
7. 等待审核通过（通常需要1-2个工作日）
8. 获取模板ID（例如：`12345`）

**更新配置：**
```properties
# 将开发模式改为生产模式
tencent.ses.template-id=12345  # 替换为实际的模板ID
```

---

### 4. 生产环境配置 ⚠️ **缺失**

**当前状态：**
`application-prod.properties` 中**没有腾讯云SES配置**

**需要添加：**
- [ ] **在生产环境配置文件中添加SES配置**

**操作步骤：**
在 `demo/src/main/resources/application-prod.properties` 中添加：

```properties
# 腾讯云SES配置 (生产环境)
tencent.ses.secret-id=${TENCENT_SES_SECRET_ID}
tencent.ses.secret-key=${TENCENT_SES_SECRET_KEY}
tencent.ses.region=ap-beijing
tencent.ses.from-email=${TENCENT_SES_FROM_EMAIL}
tencent.ses.from-name=AIGC平台
tencent.ses.template-id=${TENCENT_SES_TEMPLATE_ID}
```

**环境变量设置：**
```bash
export TENCENT_SES_SECRET_ID=你的SecretID
export TENCENT_SES_SECRET_KEY=你的SecretKey
export TENCENT_SES_FROM_EMAIL=noreply@vionow.com
export TENCENT_SES_TEMPLATE_ID=你的模板ID
```

---

### 5. SES服务开通和额度 ⚠️ **重要**

**需要确认：**
- [ ] **SES服务是否已开通**
  - 访问：https://console.cloud.tencent.com/ses
  - 检查服务状态

- [ ] **是否有可用额度**
  - 检查账户余额或免费额度
  - 确认是否有足够的邮件发送配额
  - 查看计费信息

**检查步骤：**
1. 登录腾讯云控制台
2. 进入SES服务控制台
3. 查看"概览"页面的配额和用量信息
4. 确认是否有可用额度

---

### 6. 测试验证 ⚠️ **重要**

**开发模式测试：**
- [ ] **启动服务并测试**
  ```bash
  cd demo
  ./mvnw spring-boot:run
  ```

- [ ] **测试发送验证码**
  ```bash
  curl -X POST http://localhost:8080/api/verification/email/send \
    -H "Content-Type: application/json" \
    -d '{"email":"test@example.com"}'
  ```

- [ ] **查看日志**
  - 应该看到："开发模式：邮件验证码发送到: test@example.com, 验证码: 123456"
  - 记录验证码用于登录测试

- [ ] **测试登录**
  - 访问登录页面
  - 输入邮箱和验证码
  - 验证登录功能

**生产模式测试：**
- [ ] **更新template-id配置**
- [ ] **重启服务**
- [ ] **发送测试邮件**
- [ ] **检查实际邮箱是否收到邮件**

---

## 三、配置优先级

### 🔴 紧急（必须配置）
1. **发信地址验证** - 生产环境必须验证才能发送邮件
2. **邮件模板创建** - 生产环境必须配置模板ID
3. **生产环境配置** - `application-prod.properties` 缺少SES配置

### 🟡 重要（建议配置）
4. **SES服务权限检查** - 确保账号有权限访问SES服务
5. **SES服务开通和额度** - 确保有可用配额
6. **测试验证** - 确保功能正常

### 🟢 可选（开发环境）
7. **开发模式** - 当前已配置，可直接使用

---

## 四、配置检查清单

### 开发环境配置状态

| 配置项 | 状态 | 说明 |
|--------|------|------|
| SecretID | ✅ 已配置 | 需确认有效性和权限 |
| SecretKey | ✅ 已配置 | 需确认有效性 |
| Region | ✅ 已配置 | ap-beijing |
| From-email | ✅ 已配置 | noreply@vionow.com（需确认已验证） |
| From-name | ✅ 已配置 | AIGC平台 |
| Template-id | ⚠️ 开发模式 | 当前为0，生产环境需配置实际ID |

### 生产环境配置状态

| 配置项 | 状态 | 说明 |
|--------|------|------|
| SecretID | ❌ 未配置 | 需要添加环境变量 |
| SecretKey | ❌ 未配置 | 需要添加环境变量 |
| Region | ❌ 未配置 | 需要添加配置 |
| From-email | ❌ 未配置 | 需要添加环境变量 |
| From-name | ❌ 未配置 | 需要添加配置 |
| Template-id | ❌ 未配置 | 需要创建模板并配置ID |

---

## 五、快速检查命令

### 检查配置文件
```bash
# Windows PowerShell
Test-Path demo/src/main/resources/application-dev.properties
Test-Path demo/src/main/resources/application-prod.properties

# 检查SES配置项
Select-String -Path "demo/src/main/resources/application-dev.properties" -Pattern "tencent.ses"
```

### 测试邮件发送功能
```bash
# 开发模式测试（不会实际发送邮件）
curl -X POST http://localhost:8080/api/verification/email/send \
  -H "Content-Type: application/json" \
  -d '{"email":"test@example.com"}'

# 检查日志中的验证码
# 应该看到：开发模式：邮件验证码发送到: test@example.com, 验证码: XXXXXX
```

### 测试登录功能
```bash
# 使用开发接口设置验证码（开发模式）
curl -X POST http://localhost:8080/api/verification/email/dev-set \
  -H "Content-Type: application/json" \
  -d '{"email":"test@example.com","code":"123456"}'

# 测试登录
curl -X POST http://localhost:8080/api/auth/login/email \
  -H "Content-Type: application/json" \
  -d '{"email":"test@example.com","code":"123456"}'
```

---

## 六、常见问题

### Q1: 开发模式下收不到邮件？
**A:** 这是正常的！开发模式（template-id=0）不会实际发送邮件，验证码会在日志中显示。

### Q2: 发送失败 - 认证错误
```
InvalidSecretId.InvalidSignature
```
**解决：**
- 检查SecretID和SecretKey是否正确
- 确认密钥是否有SES服务权限
- 检查密钥是否过期

### Q3: 发送失败 - 发信地址未验证
```
InvalidParameter.EmailAddressNotVerified
```
**解决：**
- 在SES控制台验证发信地址
- 检查 `tencent.ses.from-email` 配置是否正确
- 注意：开发模式（template-id=0）不需要验证也能测试

### Q4: 发送失败 - 模板不存在
```
ResourceNotFound.TemplateNotFound
```
**解决：**
- 确认模板ID是否正确
- 检查模板是否已审核通过
- 确认模板区域与配置的region一致

### Q5: 如何切换到生产模式？
**A:**
1. 验证发信地址
2. 创建邮件模板并获取模板ID
3. 更新 `tencent.ses.template-id` 配置
4. 重启服务
5. 测试实际发送邮件

---

## 七、下一步操作建议

### 立即可做（开发测试）
1. ✅ **保持当前配置**（开发模式）
2. ✅ **启动服务测试登录功能**
3. ✅ **使用日志中的验证码进行测试**

### 生产环境准备（如需要）
1. ⚠️ **验证发信地址**
   - 在SES控制台验证 `noreply@vionow.com`

2. ⚠️ **创建邮件模板**
   - 创建验证码邮件模板
   - 等待审核通过
   - 获取模板ID

3. ⚠️ **更新生产环境配置**
   - 在 `application-prod.properties` 中添加SES配置
   - 设置环境变量

4. ⚠️ **测试生产模式**
   - 更新template-id配置
   - 重启服务
   - 测试实际发送邮件

---

## 八、相关文档链接

- **腾讯云SES控制台**: https://console.cloud.tencent.com/ses
- **发信地址管理**: https://console.cloud.tencent.com/ses/address
- **邮件模板管理**: https://console.cloud.tencent.com/ses/template
- **API密钥管理**: https://console.cloud.tencent.com/cam/capi
- **SES文档**: https://cloud.tencent.com/document/product/1288
- **邮箱验证登录指南**: `EMAIL_VERIFICATION_LOGIN_GUIDE.md`
- **SES启动检查清单**: `TENCENT_SES_STARTUP_CHECKLIST.md`

---

## 九、总结

### 当前状态
- ✅ **开发环境配置已完成**，可以直接启动测试
- ✅ **开发模式已启用**（template-id=0），不会实际发送邮件
- ⚠️ **生产环境配置缺失**，需要添加SES配置

### 最小启动要求（开发模式）
1. ✅ SecretID和SecretKey（已配置）
2. ✅ From-email地址（已配置）
3. ✅ Template-id=0（开发模式，已配置）

### 生产环境要求
1. ⚠️ 已验证的发信地址
2. ⚠️ 已审核通过的邮件模板
3. ⚠️ 生产环境配置文件中的SES配置
4. ⚠️ 有效的SecretID/SecretKey和SES服务权限

**当前可以：** 直接在开发模式下启动并测试登录功能（验证码在日志中显示）

**如需实际发送邮件：** 需要完成上述生产环境配置项

