You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目SMTP认证错误求助:发送验证码遇SMTPSenderRefused

问题排查与解决方案

核心问题分析

你遇到的SMTPSenderRefused错误,根源是EMAIL_HOST_USER和EMAIL_HOST_PASSWORD为空值——因为你用os.environ.get()读取的是系统环境变量,但代码里定义的EMAIL_USER、EMAIL_PASS只是Python局部变量,并非系统环境变量,所以返回None,导致SMTP认证失败。

分步解决

1. 修复环境变量读取问题

有两种可行方案:

方案一:直接使用局部变量赋值

如果是测试阶段,或不想配置系统环境变量,直接把你定义的变量赋值给Django的邮件配置项:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_USER='user_email@gmail.com'
EMAIL_PASS='userpassword'

# 直接使用已定义的变量,而非读取系统环境变量
EMAIL_HOST_USER = EMAIL_USER
EMAIL_HOST_PASSWORD = EMAIL_PASS

方案二:正确配置系统环境变量

如果遵循生产环境安全规范,需把邮箱账号和密码设置为系统环境变量:

  • Linux/macOS:在启动项目的终端执行:
    export EMAIL_USER='user_email@gmail.com'
    export EMAIL_PASS='userpassword'
    
  • Windows:在命令提示符执行:
    set EMAIL_USER=user_email@gmail.com
    set EMAIL_PASS=userpassword
    
  • 推荐便捷方式:使用python-dotenv管理环境变量
    1. 安装依赖:
      pip install python-dotenv
      
    2. 在项目根目录创建.env文件,写入:
      EMAIL_USER=user_email@gmail.com
      EMAIL_PASS=userpassword
      
    3. 在settings.py开头添加加载代码:
      import os
      from dotenv import load_dotenv
      
      # 加载.env文件中的环境变量
      load_dotenv()
      
    之后os.environ.get('EMAIL_USER')就能正确读取到值。

2. 解决Gmail SMTP认证限制

即使配置了正确的账号密码,Gmail默认会阻止非官方应用登录,需做以下设置:

  • 未开启两步验证:登录Google账号安全设置,开启「不太安全的应用访问权限」(注意:此方式会降低账号安全性,生产环境不推荐)。
  • 已开启两步验证:在Google账号安全设置中找到「应用密码」选项(仅开启2FA后可见),选择「邮件」类型生成16位应用密码,用这个密码替换EMAIL_PASS的值。

3. 测试验证

修改配置后,可在Django shell中测试邮件发送:

from django.core.mail import send_mail
send_mail(
    '测试邮件',
    '这是一封测试邮件',
    'your_email@gmail.com',
    ['recipient@example.com'],
    fail_silently=False,
)

如果没有报错,说明配置成功。

内容的提问来源于stack exchange,提问作者Mohit Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:52:49