Files
schoolNews/schoolNewsServ/auth/邮件服务配置说明.md

243 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 邮件和短信服务配置说明
## 一、邮件服务配置
### 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会在日志中输出验证码不会实际发送
建议在开发环境中配置一个测试邮箱,以便完整测试邮件发送功能。