2018年Python发送邮件失效?SMTP库使用问题咨询
关于Python用SMTP发送Gmail邮件失败的问题
其实不是Python的SMTP库不能正常工作啦,主要是Gmail的认证规则更新了——现在普通的Gmail密码已经没法直接用于SMTP登录,这才是你脚本失效的核心原因。
为什么原来的代码不行?
Google在几年前就逐步淘汰了"不太安全的应用"登录方式,现在个人Gmail账户要通过SMTP发邮件,必须满足两个前提:
- 你的Google账号已经开启了两步验证
- 使用应用专用密码(App Password)代替普通密码登录
解决步骤+修正后的代码
第一步:准备应用专用密码
- 登录你的Google账号,进入「安全」设置页面
- 确保已经开启「两步验证」(如果没开,先按提示完成开启)
- 在两步验证下方找到「应用专用密码」,点击生成
- 选择应用为「邮件」,设备随便选一个(比如「其他」),生成后会得到一个16位的密码,把这个密码记下来,这就是你脚本里要填的
pwd
第二步:修正你的Python脚本
你的原脚本没写完,我帮你补全并调整成符合当前规则的版本:
import smtplib from email.message import EmailMessage # 配置信息 fromaddr = 'mymail@gmail.com' toaddr = 'someones@gmail.com' app_password = '这里填你生成的应用专用密码' # 构造规范的邮件(用EmailMessage比手动拼字符串更可靠) msg = EmailMessage() msg['From'] = fromaddr msg['To'] = toaddr msg['Subject'] = 'Just a message' msg.set_content('Why, oh why?') # 发送邮件 try: # 方式1:使用STARTTLS加密(端口587) server = smtplib.SMTP('smtp.gmail.com', 587) server.ehlo() server.starttls() # 开启加密连接 server.login(fromaddr, app_password) server.send_message(msg) print("邮件发送成功!") except Exception as e: print(f"发送失败:{e}") finally: server.quit()
额外注意点
- 如果你用的是Google Workspace(企业邮箱),管理员可能允许使用普通密码+开启「不太安全的应用」,但个人账号这条路已经走不通了
- 也可以用
smtplib.SMTP_SSL('smtp.gmail.com', 465)直接建立SSL连接,代码逻辑类似,把SMTP换成SMTP_SSL即可,不需要starttls步骤 - 手动拼接邮件头容易出现格式错误,用
EmailMessage模块能避免很多兼容性问题
内容的提问来源于stack exchange,提问作者mathmaniage
相关产品推荐
相关产品推荐

