You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

2018年Python发送邮件失效?SMTP库使用问题咨询

关于Python用SMTP发送Gmail邮件失败的问题

其实不是Python的SMTP库不能正常工作啦,主要是Gmail的认证规则更新了——现在普通的Gmail密码已经没法直接用于SMTP登录,这才是你脚本失效的核心原因。

为什么原来的代码不行?

Google在几年前就逐步淘汰了"不太安全的应用"登录方式,现在个人Gmail账户要通过SMTP发邮件,必须满足两个前提:

  • 你的Google账号已经开启了两步验证
  • 使用应用专用密码(App Password)代替普通密码登录

解决步骤+修正后的代码

第一步:准备应用专用密码

  1. 登录你的Google账号,进入「安全」设置页面
  2. 确保已经开启「两步验证」(如果没开,先按提示完成开启)
  3. 在两步验证下方找到「应用专用密码」,点击生成
  4. 选择应用为「邮件」,设备随便选一个(比如「其他」),生成后会得到一个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:29:19