Files
InfoGenie/backend/md/邮件服务修复说明.md
2025-09-08 11:27:03 +08:00

92 lines
2.3 KiB
Markdown
Executable File
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.
# InfoGenie 邮件服务修复说明
## 修复内容
### 问题描述
原始的 `email_service.py` 中的邮件发送功能存在问题,无法正常发送验证码邮件。
### 修复方案
参考成功的 `QQEmailSendAPI.py` 实现,对 `email_service.py` 进行了以下修复:
1. **SMTP连接方式优化**
-`with smtplib.SMTP_SSL()` 改为直接使用 `smtplib.SMTP_SSL()`
- 显式调用 `smtp_obj.quit()` 关闭连接
2. **邮件头设置优化**
- 确保 `From` 字段直接使用邮箱地址,不使用 `Header` 包装
- 保持与成功实现的一致性
3. **错误处理增强**
- 添加了针对 `SMTPAuthenticationError` 的专门处理
- 添加了针对 `SMTPConnectError` 的专门处理
- 提供更详细的错误信息
4. **调试信息优化**
- 添加了适量的日志输出用于问题诊断
- 移除了生产环境不安全的验证码返回
## 配置要求
### 环境变量
确保设置以下环境变量:
```bash
MAIL_USERNAME=your-qq-email@qq.com
MAIL_PASSWORD=your-qq-auth-code
```
### QQ邮箱授权码
1. 登录QQ邮箱
2. 进入设置 -> 账户
3. 开启SMTP服务
4. 获取授权码不是QQ密码
## 使用方法
### 发送验证码
```python
from modules.email_service import send_verification_email
# 发送注册验证码
result = send_verification_email('user@qq.com', 'register')
# 发送登录验证码
result = send_verification_email('user@qq.com', 'login')
```
### 验证验证码
```python
from modules.email_service import verify_code
# 验证用户输入的验证码
result = verify_code('user@qq.com', '123456')
```
## 测试
运行测试脚本验证功能:
```bash
cd backend
python test/test_email_fix.py
```
## 支持的邮箱
目前仅支持QQ邮箱系列
- @qq.com
- @vip.qq.com
- @foxmail.com
## 注意事项
1. **安全性**验证码不会在API响应中返回仅通过邮件发送
2. **有效期**验证码有效期为5分钟
3. **尝试次数**每个验证码最多可尝试验证3次
4. **频率限制**:建议添加发送频率限制防止滥用
## 修复文件
- `backend/modules/email_service.py` - 主要修复文件
- `backend/test/test_email_fix.py` - 测试脚本
- `backend/邮件服务修复说明.md` - 本说明文档
修复完成后,邮件发送功能已正常工作,可以成功发送注册和登录验证码邮件。