PythonAnywhere部署Django项目调用Gmail SMTP发信出现535认证错误如何解决?
排查解决步骤
修正配置不一致问题
你当前的配置存在明显矛盾:settings.py中EMAIL_HOST_USER填写的发件人账号,和views.py中from_email参数指定的发件人邮箱不匹配。SMTP验证时会优先使用EMAIL_HOST_USER的账号登录,发件人地址和登录账号不一致会触发Google的安全拦截,请首先将这两个值修改为完全相同的邮箱地址。替换为应用专用密码做验证
Google自2022年5月起已经对所有普通个人账号全面停用「低安全性应用访问」功能,即使手动开启该选项也不会生效。正确的验证方式如下:- 给你的Google账号开启两步验证
- 在Google账号的安全设置中生成应用专用密码,生成时应用类型选择「其他」,自定义名称即可
- 将
settings.py中的EMAIL_HOST_PASSWORD替换为生成的16位应用专用密码,不需要输入空格
手动放行新设备登录请求
PythonAnywhere的服务器IP属于Google未识别的异地登录源,即使账号凭证正确也会被临时拦截。你可以登录发件人Gmail账号,查看最近的安全活动通知,找到被拦截的登录请求,手动确认是本人操作后再次测试发送即可。排除环境限制影响
你可以先在本地开发环境使用相同的配置测试邮件发送功能,如果本地可以正常发送,再重启PythonAnywhere的Web应用后重试:PythonAnywhere默认允许587端口的TLS SMTP请求,免费层也不需要额外申请权限。可选替代方案
如果上述步骤都无法解决,可以更换事务邮件服务,这类服务的SMTP配置逻辑和Gmail一致,且没有严格的个人账号安全拦截限制,更适合生产环境使用。
内容的提问来源于stack exchange,提问作者Praveen Yadav
相关产品推荐
相关产品推荐

