Files
InfoGenie/backend/md/邮件服务修复说明.md

2.3 KiB
Raw Blame History

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. 调试信息优化

    • 添加了适量的日志输出用于问题诊断
    • 移除了生产环境不安全的验证码返回

配置要求

环境变量

确保设置以下环境变量:

MAIL_USERNAME=your-qq-email@qq.com
MAIL_PASSWORD=your-qq-auth-code

QQ邮箱授权码

  1. 登录QQ邮箱
  2. 进入设置 -> 账户
  3. 开启SMTP服务
  4. 获取授权码不是QQ密码

使用方法

发送验证码

from modules.email_service import send_verification_email

# 发送注册验证码
result = send_verification_email('user@qq.com', 'register')

# 发送登录验证码
result = send_verification_email('user@qq.com', 'login')

验证验证码

from modules.email_service import verify_code

# 验证用户输入的验证码
result = verify_code('user@qq.com', '123456')

测试

运行测试脚本验证功能:

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 - 本说明文档

修复完成后,邮件发送功能已正常工作,可以成功发送注册和登录验证码邮件。