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

Python应用集成Gmail发送邮件触发SMTP 334错误如何排查

问题根因

返回的(334, b'UGFzc3dvcmQ6')是SMTP认证阶段的标准提示,把UGFzc3dvcmQ6做base64解码结果就是Password:,代表服务端要求校验密码,但你传入的密码参数未通过校验或未被正确读取。你已经完成了2FA开启、应用专用密码生成、IMAP开启、安全访问确认这些前置操作,代码语法本身没有错误,故障基本出在参数读取环节,和服务端权限配置无关。

排查修复步骤
  • 优先排查环境变量读取问题:这是这类报错最常见的诱因
    • 先做对照测试:临时把代码里的EMAIL_ADDRESS、EMAIL_PASSWORD直接替换为你的Gmail完整地址、16位应用专用密码(测试完成后必须立刻删除硬编码内容,避免凭证泄露),运行脚本看是否发信成功。如果硬编码状态下可以正常发信,100%是环境变量配置错误:
      • 检查设置环境变量的终端和运行Python脚本的终端是否为同一个会话,环境变量是会话级配置,重启终端、切换终端窗口后之前设置的变量会自动失效
      • 配置环境变量时等号两侧不能加空格:Windows系统用set Email_Password=你的应用密码、macOS/Linux用export Email_Password=你的应用密码,等号后面如果多打了空格,空格会被识别为密码的一部分,直接导致认证失败
      • 如果在VSCode、PyCharm等IDE内运行脚本,需要在项目的运行配置面板里单独配置环境变量,IDE不会自动读取系统终端中设置的环境变量
  • 如果硬编码后仍然报错,检查应用专用密码本身的配置问题:
    • 生成应用专用密码时,应用类型要选择「邮件」,设备选择当前运行脚本的对应设备,不要选其他应用类型,否则生成的密码没有SMTP发信权限
    • 复制应用专用密码时不要带前后空格、不要漏字符,应用专用密码是16位连续字符串,不需要输入你Gmail账号的原始登录密码,2FA开启后原始密码无法通过SMTP认证
  • 你的SMTP连接配置本身是正确的:smtp.gmail.com搭配465端口走SMTP_SSL不需要额外配置starttls,不要随意更换端口为587调整连接方式,避免引入额外问题。
临时验证用代码
import smtplib
from email.message import EmailMessage

# 仅用于验证配置,测试完成后立刻删除硬编码的账号密码,换回环境变量读取方式
EMAIL_ADDRESS = "你的完整Gmail地址,格式为xxx@gmail.com"
EMAIL_PASSWORD = "16位无空格应用专用密码"

msg = EmailMessage()
msg['Subject'] = 'Testing email.'
msg['From'] = EMAIL_ADDRESS
msg['To'] = 'orchidlight09@gmail.com'
msg.set_content('This is a test email.')

with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
    smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
    smtp.send_message(msg)

安全提示:不要把包含账号、应用专用密码的代码上传到公开代码仓库,生产环境始终使用环境变量或专用密钥管理服务读取凭证。

内容的提问来源于stack exchange,提问作者orchid light

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:15:14