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

Django用Gmail时.env与settings.py变量名重复致SMTPAuthenticationError

解决Django+Gmail邮件发送SMTPAuthenticationError且保留密码隐藏的问题

一、排查Gmail认证权限问题

这是引发该错误的核心原因:

  • 开启两步验证的情况:必须使用应用专用密码替代普通登录密码。
    操作流程:登录Google账号→进入「安全」页面→确认「两步验证」已开启→找到「应用专用密码」选项→生成新的应用专用密码(选择“邮件”应用,设备选“其他”),将该密码替换.env文件中的EMAIL_HOST_PASSWORD值。
  • 未开启两步验证的情况:Google已逐步移除“不太安全的应用访问”选项,建议优先开启两步验证并使用应用专用密码;若暂时无法开启,可尝试启用「Google账号的不安全应用访问」(注意此方式安全性较低)。

二、确保.env文件正确加载

  1. 安装依赖包:
    pip install python-dotenv
    
  2. 在settings.py开头添加加载代码,明确指定.env路径避免读取失败:
    from dotenv import load_dotenv
    import os
    from pathlib import Path
    
    BASE_DIR = Path(__file__).resolve().parent.parent
    load_dotenv(os.path.join(BASE_DIR, '.env'))
    
    # 加载环境变量
    EMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')
    EMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')
    

三、排查变量覆盖问题

改变量名能正常运行,大概率是原变量名EMAIL_HOST_PASSWORD被其他配置覆盖:

  • 检查settings.py中是否有其他代码重新赋值了EMAIL_HOST_PASSWORD;
  • 检查系统环境变量中是否存在同名变量,若有,要么删除系统环境变量,要么修改.env中的变量名(比如改为DJANGO_EMAIL_HOST_PASSWORD),同步更新settings.py:
    EMAIL_HOST_PASSWORD = os.getenv('DJANGO_EMAIL_HOST_PASSWORD')
    
    此方式依然能保留密码隐藏,变量仍存储在.env文件中,不会硬编码到代码内。

四、验证变量读取状态

在settings.py中临时添加打印代码,确认环境变量是否加载成功:

print(f"EMAIL_HOST_USER: {EMAIL_HOST_USER}")
print(f"EMAIL_HOST_PASSWORD: {EMAIL_HOST_PASSWORD}")

运行项目后查看控制台输出,若值为None,说明.env文件未被正确加载,回到第二步检查路径和加载逻辑。

内容的提问来源于stack exchange,提问作者Šimon Hlavsa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:44:54