Python Gmail-SMTP脚本Win10+3.6可用,Ubuntu16.04+3.5.2报错
解决Ubuntu 16.04下Python SMTP Gmail登录报错"Please log in via your web browser"的问题
我之前也碰到过一模一样的情况——Windows上跑顺风顺水的Gmail SMTP脚本,放到Ubuntu环境就触发这个登录验证报错,本质是Google的安全机制把陌生的Linux环境当成了风险设备,下面给你几个靠谱的解决步骤:
1. 先解锁Gmail的设备验证限制
Google会把你的Ubuntu环境识别为新的陌生设备,哪怕开了“允许不太安全的应用”,也需要手动解锁一次临时权限:
- 用浏览器登录你的
user@gmail.com账户 - 进入账户安全设置页面,搜索DisplayUnlockCaptcha这个选项
- 点击验证按钮,然后立刻运行你的Python脚本,这时候Google会暂时允许这个新设备的登录请求
2. 检查两步验证与应用密码
如果你的Gmail账户开了两步验证,那“允许不太安全的应用”这个选项会直接被隐藏,普通密码根本没法用于SMTP登录:
- 去Google账户安全设置里找到应用密码选项(只有开启两步验证后才会显示)
- 生成一个专门的应用密码(选择“邮件”应用,设备类型选“其他”)
- 把脚本里的
"pass"替换成这个生成的应用密码
3. 确认“允许不太安全的应用”设置生效
如果没开两步验证,再去确认一次这个设置:
- 登录Gmail账户安全页,找到不太安全的应用访问选项
- 确保开关是打开状态,有时候设置可能因为缓存或网络问题没生效,可以关掉再重新打开一次试试
4. 脚本适配优化(可选)
有时候SMTP的587端口在Linux环境下可能出现连接兼容问题,你可以试试改用SMTP_SSL和465端口,修改脚本里的服务器初始化部分:
try: # 替换原有的server初始化代码 server = smtplib.SMTP_SSL("smtp.gmail.com", 465) server.ehlo() server.login(user, pwd) server.sendmail(FROM, TO, message) server.close() print ('successfully sent the mail') except Exception as e: print(e) print ("failed to send mail")
SMTP_SSL是直接加密连接,能避免starttls步骤可能出现的环境兼容问题。
按照上面的步骤操作,基本就能解决这个报错了。
内容的提问来源于stack exchange,提问作者JustAGuy
相关产品推荐
相关产品推荐

