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

Heroku部署Django项目调用Gmail API发邮件失败如何排查?

排查思路
  • 核对Heroku环境变量配置
    本地读取的EMAIL_USERNAME、EMAIL_PASSWORD来自本地.env文件,Heroku不会自动同步该文件配置,需要进入你的Heroku应用后台,在「设置」->「Config Vars」板块确认两个变量是否已正确添加,变量值和本地使用的完全一致。
  • 检查Gmail账号的安全拦截规则
    • 若你的Gmail账号未开启两步验证,需要先开启「不太安全的应用访问」权限;若已开启两步验证,必须使用应用专用密码作为EMAIL_HOST_PASSWORD的值,不能直接使用账号登录密码。
    • 登录对应Gmail账号查看安全提醒邮件,Google会默认拦截陌生IP的登录请求,Heroku服务器IP属于陌生访问源,找到对应的拦截通知后选择允许访问即可。
  • 补充错误日志定位具体问题
    你当前提供的Heroku日志只有路由访问记录,没有发信逻辑的报错信息,建议在发信代码外层添加异常捕获,输出详细错误到日志:
    import traceback
    import logging
    
    logger = logging.getLogger(__name__)
    
    # 原有发信逻辑外层加try catch
    try:
        with smtplib.SMTP_SSL("smtp.gmail.com", 465) as smtp:
            smtp.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD)
            smtp.send_message(message)
    except Exception as e:
        logger.error(f"发信失败错误:{str(e)}")
        logger.error(traceback.format_exc())
    
    重新部署后触发一次发信操作,再去Heroku日志中搜索对应的错误输出,即可确定是登录失败、连接超时还是其他逻辑问题。
  • 测试Heroku出站网络连通性
    执行heroku run bash进入应用dyno的终端,手动运行telnet smtp.gmail.com 465测试是否能连通Gmail的SMTP服务器,若连不通则是网络层面的问题。
  • 检查上层调用逻辑
    确认你调用MailJournals函数的上层代码,有没有捕获异常后没有输出日志的情况,避免错误被静默吞掉。

注:你描述中提到使用Gmail API,但提供的代码是直接通过SMTP协议发信,如果你实际是走Gmail API发信,还需要确认OAuth2凭证、API密钥等配置是否已正确同步到Heroku的环境变量中。

内容的提问来源于stack exchange,提问作者Tomasz Gryczka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:06:04