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

smtp.gmail.com TLS连接异常,不使用smtplib的SMTP认证失败问题

问题排查及修复方案

核心问题1:SMTP返回码校验规则完全错误

SMTP协议的标准返回码含义完全写反,错误的判断逻辑会导致程序提前进入异常流程,后续命令执行全部错乱:

  • 正常HELO命令返回码为250,代码中错误判断为530才合法,530实际是「未认证禁止操作」的错误码
  • MAIL FROM、RCPT TO命令正常返回码为250,全部被设置为判断530合法
  • DATA命令正常返回码为354,也被错误设置为判断530合法

核心问题2:发送用户名/密码时缺少协议要求的换行符

SMTP所有交互内容都必须以\r\n结尾,对用户名、密码做base64编码后直接发送,没有追加换行符,服务器会一直等待输入结束,所以会出现输入后一直返回空白的卡顿现象。
需要修改为:

uname = base64.b64encode(username.encode()) + b'\r\n'
pword = base64.b64encode(password.encode()) + b'\r\n'

核心问题3:ssl.wrap_socket缺少必要参数

当前Python的ssl模块调用wrap_socket封装SMTP服务的TLS连接时,必须指定server_hostname参数,否则会出现证书验证失败或者TLS握手异常,修改为:

ssl_clientSocket = ssl.wrap_socket(clientSocket, server_hostname=mailserver)

其他注意事项

  • 谷歌SMTP服务已经不再支持普通账号密码直接登录,如果开启了谷歌账号两步验证,必须创建应用专用密码用于SMTP登录
  • 第二次HELO后的响应打印被注释,建议取消注释方便排查响应内容
  • 所有套接字的recv/read结果建议统一做decode处理,方便查看错误信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:45:02