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

Django API部署至Heroku后使用Hotmail账户发送邮件出现SMTPAuthenticationError问题排查

解决Heroku部署Django后Hotmail SMTP认证失败问题

这个问题我之前帮不少开发者排查过,核心原因基本都围绕Hotmail的SMTP安全限制和Heroku环境的配置细节,给你整理几个关键解决步骤:

1. 优先检查两步验证(2FA)与应用密码

如果你的Hotmail账户开了两步验证,绝对不能用原账户密码做SMTP认证,必须生成专门的「应用密码」:

  • 登录Microsoft账户安全中心,找到「应用密码」选项(只有开启2FA后才会显示)
  • 生成一个新的应用密码,复制后替换Heroku里EMAIL_HOST_PASSWORD的环境变量值
  • 本地测试正常可能是因为你在信任设备上登录过,跳过了部分验证环节,但Heroku属于远程陌生环境,必须用应用密码

2. 确认Outlook账户的SMTP访问权限

检查你的账户是否允许第三方SMTP客户端访问:

  • 登录Outlook网页版,进入「设置」→「邮件」→「同步邮件」
  • 确保「允许设备和应用使用IMAP/SMTP」的开关是打开的(不同版本界面可能略有差异)
  • 另外去「账户安全」→「登录活动」里看看,如果Heroku的IP被标记为可疑登录,手动授权这个尝试就好

3. 验证Heroku环境变量是否真的生效

有时候环境变量的键名拼写错了或者值带了多余空格,都会导致认证失败:

  • 打开终端,运行这两个命令检查变量:
    heroku config:get EMAIL_HOST_USER
    heroku config:get EMAIL_HOST_PASSWORD
    
  • 确认输出的邮箱和密码(应用密码)和你本地测试用的完全一致,没有拼写错误或者格式问题

4. 完善Django邮件配置

给你的配置补上DEFAULT_FROM_EMAIL项,确保发件人邮箱和SMTP登录邮箱一致,避免被Outlook的反垃圾机制拦截:

CORS_ALLOWED_ORIGINS = ['https://gianlop3z-dev.web.app']
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST = 'smtp.office365.com'
EMAIL_HOST_USER = environ.get('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = environ.get('EMAIL_HOST_PASSWORD')
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER  # 新增这一行,保证发件人一致性
django_heroku.settings(locals())

按这个顺序排查,基本能解决BL1PR13CA0128这个服务器返回的认证失败问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:57:46