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

如何在Heroku上通过Gmail账号使用yagmail发送邮件?

问题排查与修复方案

  • 优先确认Heroku环境变量配置
    你在GitHub Secrets中存储的变量默认不会自动同步到Heroku运行环境,需要手动配置:进入Heroku对应应用后台 → 点击Settings标签 → 找到Config Vars栏目 → 分别添加SENDER_EMAIL、SENDER_APP_PASSWORD、RECEIVER_EMAIL三个变量,确认值和本地测试用的完全一致。如果你是通过GitHub Actions自动部署,需要在工作流配置文件中将GitHub Secrets的值写入Heroku配置变量,否则运行时读取到的三个值都是空值,自然无法发信。
  • 显式指定yagmail的SMTP连接参数
    本地运行时yagmail会自动适配默认的Gmail SMTP参数,但Heroku网络环境下默认参数可能失效,需要在初始化时显式指定服务地址、端口和加密方式,修改后的代码参考:
import os
import yagmail

SENDER_EMAIL = os.getenv("SENDER_EMAIL")
SENDER_APP_PASSWORD = os.getenv("SENDER_APP_PASSWORD")
RECEIVER_EMAIL = os.getenv("RECEIVER_EMAIL")

test_sub = "Test mail"
test_cont = "Test content"

# 显式指定Gmail SMTP配置
try:
    with yagmail.SMTP(
        user=SENDER_EMAIL,
        password=SENDER_APP_PASSWORD,
        host='smtp.gmail.com',
        port=465,
        smtp_ssl=True
    ) as yag:
        yag.send(RECEIVER_EMAIL, test_sub, test_cont)
        print("邮件发送成功")
except Exception as e:
    # 打印错误信息方便排查,可在Heroku日志中查看具体报错
    print(f"邮件发送失败,错误信息:{e}")
  • 确认Google账号安全配置
    再次确认你的Google账号已开启两步验证,生成的应用专用密码没有过期、没有输错,同时查看Google账号的安全通知,确认没有拦截来自Heroku的登录请求,如有拦截点击信任即可。
  • 排查网络限制问题
    如果上述配置都正确,可查看Heroku应用运行日志的报错内容:如果是连接超时,大概率是Heroku动态出口IP被Google临时拦截,可尝试更换SMTP端口为587,将smtp_ssl=True改为smtp_starttls=True;如果是认证失败,重新生成Google应用专用密码后更新到Heroku配置变量即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:18:02