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
相关产品推荐
相关产品推荐

