邮件服务配置指南

概述

本系统支持通过SMTP协议发送验证码邮件,支持主流邮件服务提供商,包括QQ邮箱、Gmail、163邮箱等。

配置步骤

1. 创建 .env 文件

在项目根目录 /home/ronghanji/api/API-TRM/rhj/backend/ 下创建 .env 文件(如果不存在),参考 .env.example 文件。

2. 邮件服务配置选项

QQ邮箱配置(推荐)

MAIL_SERVER=smtp.qq.com
MAIL_PORT=587
MAIL_USE_TLS=true
MAIL_USERNAME=your_email@qq.com
MAIL_PASSWORD=your_app_password
MAIL_DEFAULT_SENDER=your_email@qq.com

QQ邮箱授权码获取方法:

  1. 登录QQ邮箱 (https://mail.qq.com)
  2. 点击"设置" → "账户"
  3. 找到"POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务"
  4. 开启"POP3/SMTP服务"或"IMAP/SMTP服务"
  5. 按照提示发送短信验证
  6. 获得16位授权码,这个授权码就是MAIL_PASSWORD

Gmail配置

MAIL_SERVER=smtp.gmail.com
MAIL_PORT=587
MAIL_USE_TLS=true
MAIL_USERNAME=your_email@gmail.com
MAIL_PASSWORD=your_app_password
MAIL_DEFAULT_SENDER=your_email@gmail.com

Gmail应用密码获取方法:

  1. 登录Google账号管理 (https://myaccount.google.com)
  2. 启用两步验证
  3. 转到"安全性" → "应用密码"
  4. 选择"邮件"和设备类型
  5. 生成16位应用密码

163邮箱配置

MAIL_SERVER=smtp.163.com
MAIL_PORT=25
MAIL_USE_TLS=false
MAIL_USERNAME=your_email@163.com
MAIL_PASSWORD=your_email_password
MAIL_DEFAULT_SENDER=your_email@163.com

163邮箱客户端授权密码获取方法:

  1. 登录163邮箱
  2. 点击"设置" → "POP3/SMTP/IMAP"
  3. 开启"POP3/SMTP服务"
  4. 设置客户端授权密码

企业邮箱配置

MAIL_SERVER=your_company_smtp_server
MAIL_PORT=587
MAIL_USE_TLS=true
MAIL_USERNAME=your_email@company.com
MAIL_PASSWORD=your_password
MAIL_DEFAULT_SENDER=your_email@company.com

3. 完整的 .env 配置示例

# 数据库配置
SQLURL=mysql+pymysql://username:password@localhost:3306/redbook
SQLPORT=3306
SQLNAME=redbook
SQLUSER=root
SQLPWD=123456

# JWT密钥
JWT_SECRET_KEY=your-jwt-secret-key-here

# Flask密钥
SECRET_KEY=your-flask-secret-key-here

# 邮件服务配置(选择一种)
MAIL_SERVER=smtp.qq.com
MAIL_PORT=587
MAIL_USE_TLS=true
MAIL_USERNAME=your_email@qq.com
MAIL_PASSWORD=your_qq_auth_code
MAIL_DEFAULT_SENDER=your_email@qq.com

配置验证

1. 测试邮件配置

创建一个测试脚本来验证邮件配置是否正确:

# test_email.py
import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from config import Config
from app.functions.FAuth import FAuth
from app.models import db
from app import create_app

def test_email_config():
    """测试邮件配置"""
    app = create_app()
    
    with app.app_context():
        # 检查配置
        print("邮件服务器配置:")
        print(f"MAIL_SERVER: {Config.MAIL_SERVER}")
        print(f"MAIL_PORT: {Config.MAIL_PORT}")
        print(f"MAIL_USE_TLS: {Config.MAIL_USE_TLS}")
        print(f"MAIL_USERNAME: {Config.MAIL_USERNAME}")
        print(f"MAIL_DEFAULT_SENDER: {Config.MAIL_DEFAULT_SENDER}")
        
        if not all([Config.MAIL_USERNAME, Config.MAIL_PASSWORD, Config.MAIL_DEFAULT_SENDER]):
            print("❌ 邮件配置不完整!")
            return False
        
        # 发送测试邮件
        auth = FAuth(db.session)
        result = auth.send_verification_email(
            email="test@example.com",  # 替换为您的测试邮箱
            verification_type="register"
        )
        
        if result['success']:
            print("✅ 邮件配置正确,测试邮件发送成功!")
            return True
        else:
            print(f"❌ 邮件发送失败: {result['message']}")
            return False

if __name__ == "__main__":
    test_email_config()

2. 运行测试

cd /home/ronghanji/api/API-TRM/rhj/backend
python test_email.py

常见问题和解决方案

1. 认证失败 (535 Authentication failed)

原因: 用户名或密码错误 解决方案:

  • 检查邮箱地址是否正确
  • 确认使用的是授权码/应用密码,不是登录密码
  • QQ/163邮箱需要开启SMTP服务并获取授权码

2. 连接超时

原因: 网络问题或服务器地址错误 解决方案:

  • 检查MAIL_SERVER和MAIL_PORT是否正确
  • 确认网络连接正常
  • 尝试使用不同的端口(如465用于SSL)

3. TLS错误

原因: TLS配置问题 解决方案:

  • 检查MAIL_USE_TLS设置是否正确
  • 某些邮件服务器需要使用SSL(端口465)而不是TLS

4. 发送频率限制

原因: 邮件服务商限制发送频率 解决方案:

  • 减少发送频率
  • 使用企业邮箱服务
  • 考虑使用专业的邮件服务(如SendGrid、阿里云邮件推送等)

生产环境建议

1. 安全性

  • 使用环境变量存储敏感信息
  • 定期更换邮箱密码和授权码
  • 使用专用的邮箱账号发送系统邮件

2. 可靠性

  • 配置备用邮件服务器
  • 实现邮件发送重试机制
  • 监控邮件发送状态

3. 性能优化

  • 使用异步邮件发送
  • 实现邮件队列
  • 限制发送频率

专业邮件服务替代方案

如果需要更高的可靠性和发送量,建议使用专业邮件服务:

  1. 阿里云邮件推送
  2. 腾讯云邮件推送
  3. SendGrid
  4. Mailgun

这些服务通常提供更好的送达率和更高的发送限制。