# 邮件和短信服务配置说明

## 一、邮件服务配置

### 1. 在 application.yml 中添加邮件配置

```yaml
spring:
  mail:
    # 邮件服务器地址（以QQ邮箱为例）
    host: smtp.qq.com
    # 端口号
    port: 587
    # 发件人邮箱
    username: your-email@qq.com
    # 授权码（不是邮箱密码）
    password: your-authorization-code
    # 编码
    default-encoding: UTF-8
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true
```

### 2. 获取QQ邮箱授权码步骤

1. 登录QQ邮箱
2. 点击【设置】->【账户】
3. 找到【POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务】
4. 开启【POP3/SMTP服务】或【IMAP/SMTP服务】
5. 点击【生成授权码】
6. 按照提示发送短信，获取16位授权码
7. 将授权码填入配置文件的 `password` 字段

### 3. 其他常用邮箱配置

#### 163邮箱
```yaml
spring:
  mail:
    host: smtp.163.com
    port: 465
    username: your-email@163.com
    password: your-authorization-code
```

#### Gmail
```yaml
spring:
  mail:
    host: smtp.gmail.com
    port: 587
    username: your-email@gmail.com
    password: your-app-password
```

## 二、短信服务配置（支持多服务商）

### 1. 通用配置说明

系统支持多种短信服务商，通过 `provider` 配置切换：
- **aliyun**: 阿里云短信服务（已实现）
- **tencent**: 腾讯云短信服务（待实现）

### 2. 配置文件设置

在 `application.yml` 中添加以下配置：

```yaml
sms:
  # 是否启用短信服务（true: 真实发送, false: 模拟模式）
  enabled: false
  # 短信服务商（aliyun: 阿里云, tencent: 腾讯云）
  provider: aliyun
  # AccessKey ID（从服务商控制台获取）
  access-key-id: LTAI5txxxxxxxxxxxxxxxx
  # AccessKey Secret（从服务商控制台获取）
  access-key-secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  # 短信签名名称（需要在服务商平台申请）
  sign-name: 红色思政学习平台
  # 验证码模板CODE（需要在服务商平台申请）
  template-code: SMS_123456789
  # 区域ID（阿里云：cn-hangzhou，腾讯云：ap-guangzhou）
  region-id: cn-hangzhou
```

### 3. 阿里云短信服务配置

#### 3.1 申请阿里云短信服务

1. 登录 [阿里云控制台](https://www.aliyun.com/)
2. 开通【短信服务】产品
3. 创建签名（需要企业资质或个人认证）
4. 创建短信模板（验证码类型）
   - 模板示例：`您的验证码为：${code}，该验证码10分钟内有效，请勿泄漏于他人！`
5. 获取 AccessKey ID 和 AccessKey Secret
   - 进入【访问控制】-> 【用户管理】
   - 创建RAM用户并授予 AliyunDysmsFullAccess 权限
   - 创建 AccessKey

#### 3.2 阿里云配置示例

```yaml
sms:
  enabled: true
  provider: aliyun
  access-key-id: LTAI5txxxxxxxxxxxxxxxx
  access-key-secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  sign-name: 红色思政学习平台
  template-code: SMS_123456789
  region-id: cn-hangzhou
```

#### 3.3 费用说明

- **验证码短信**：约 ¥0.045/条
- **通知短信**：约 ¥0.045/条

详细配置步骤请查看：`阿里云短信配置示例.md`

### 4. 腾讯云短信服务配置（待实现）

```yaml
sms:
  enabled: true
  provider: tencent
  access-key-id: your-secret-id
  access-key-secret: your-secret-key
  sign-name: 红色思政学习平台
  template-code: 123456
  region-id: ap-guangzhou
```

### 5. 开发模式说明

如果 `enabled` 设置为 `false` 或未配置 AccessKey，系统会自动使用**模拟模式**：
- ✅ 不会实际发送短信
- ✅ 在日志中输出验证码内容
- ✅ 适合开发和测试环境
- ✅ 不产生任何费用

**推荐**：开发环境始终使用 `enabled: false`

### 6. 模板参数说明

验证码模板需要包含 `${code}` 变量，系统会自动替换为6位数字验证码。

模板示例：
```
【红色思政学习平台】您的验证码为：${code}，该验证码10分钟内有效，请勿泄漏于他人！
```

### 7. 注意事项

- **AccessKey 安全**：不要将 AccessKey 提交到代码仓库
- **短信限流**：各服务商都有频率限制，注意防刷
- **验证码有效期**：建议在模板中明确说明
- **测试建议**：开发环境使用 `enabled: false` 避免浪费

## 三、Redis配置

验证码存储在Redis中，确保Redis服务已启动并配置正确：

```yaml
spring:
  redis:
    host: localhost
    port: 6379
    password: your-redis-password
    database: 0
```

## 四、API接口说明

### 1. 发送邮箱验证码

- **接口**: POST /auth/send-email-code
- **参数**: 
  ```json
  {
    "email": "user@example.com"
  }
  ```
- **返回**: 
  ```json
  {
    "code": 200,
    "message": "验证码已发送到邮箱",
    "data": true
  }
  ```

### 2. 发送手机验证码

- **接口**: POST /auth/send-sms-code
- **参数**: 
  ```json
  {
    "phone": "13800138000"
  }
  ```
- **返回**: 
  ```json
  {
    "code": 200,
    "message": "验证码已发送",
    "data": true
  }
  ```

### 3. 验证码特性

- 验证码有效期：10分钟
- 发送频率限制：60秒内只能发送一次
- 验证码长度：6位数字
- 验证码存储在Redis中，格式为：
  - 邮箱验证码：`email:code:邮箱地址`
  - 手机验证码：`sms:code:手机号`

## 五、前端注册方式

前端支持三种注册方式：

1. **用户名注册**：输入用户名、学号、密码
2. **手机号注册**：输入手机号、验证码、学号、密码
3. **邮箱注册**：输入邮箱、验证码、学号、密码

用户可以通过标签页切换注册方式。

## 六、开发环境测试

在开发环境中：

- 邮件服务：如果未配置邮箱，EmailUtils会记录错误日志
- 短信服务：SmsUtils会在日志中输出验证码，不会实际发送

建议在开发环境中配置一个测试邮箱，以便完整测试邮件发送功能。

