人脸口罩检测脚本SMTPAuthenticationError问题求助:用户名密码正确仍无法发送告警邮件
解决Gmail SMTPAuthenticationError的问题
我之前也踩过Gmail SMTP认证的坑,结合你的情况,给你几个实用的排查和解决方向:
优先使用应用专用密码:
即使你关闭了两步验证,Google现在对普通密码的SMTP登录限制越来越严。建议你去Google账号的安全设置里,找到「应用专用密码」选项(如果找不到,确认账号没有开启高级保护),生成一个专门给Python脚本用的密码,替换代码里的原密码。这个密码是16位的,不需要空格,直接复制粘贴就行。确认"不太安全的应用访问"是否真的生效:
有时候这个开关切换后需要等几分钟才会同步,或者你可以尝试退出Google账号再重新登录一下。另外要注意,Google已经在逐步淘汰这个选项,长远来看用应用专用密码或者OAuth2会更稳妥。修复代码里的小疏漏:
你代码里的mail.close少了括号,应该写成mail.close(),这个虽然不是导致认证错误的直接原因,但会导致SMTP连接无法正确关闭,可能引发后续的异常,建议补上。尝试改用SMTP_SSL连接:
有时候starttls的连接方式会遇到证书或者网络问题,你可以换成直接用SSL连接,代码修改如下:if (label == "No Mask"): messagebox.showwarning("Warning","Access Denied. Please wear a Face Mask") message = 'Subject: {}\n\n{}'.format(SUBJECT, TEXT) # 改用SMTP_SSL直接连接465端口 mail = smtplib.SMTP_SSL('smtp.gmail.com', 465) mail.login('kwerondaa@gmail.com','你的应用专用密码') mail.sendmail('kwerondaa@gmail.com','kwerondaa@gmail.com',message) mail.close() # 补上括号 else: pass检查账号是否被临时锁定:
如果之前多次尝试错误登录,Google可能会临时锁定你的SMTP访问权限,你可以去Google账号的「安全活动」页面查看有没有异常登录记录,按照提示解锁账号即可。
内容的提问来源于stack exchange,提问作者Ambroze kweronda




