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

Gmail开启2FA用应用密码SMTP发信报net_io_connectionclosed错误

Gmail SMTP 应用密码发送失败排查方案

你遇到的System.IO.IOException: Unable to read data from transport connection: net_io_connectionclosed报错是SMTP握手阶段被Gmail服务端主动断开连接导致的,开启双重验证并创建应用密码后,账号侧不需要额外配置,问题全部来自连接参数不匹配或框架兼容问题,按以下要求配置即可正常发送:

  • 必须严格匹配Gmail SMTP的官方接入参数
    • 服务地址固定为smtp.gmail.com,不能用其他地址
    • 端口固定使用587,Gmail已永久关闭25端口的未加密接入,走25端口会被直接拒连
    • 必须开启EnableSsl = true,使用STARTTLS模式加密连接
    • 认证用户名填完整的Gmail邮箱地址(必须带@gmail.com后缀),认证密码填你生成的16位应用密码,不要填账号原登录密码,输入时去掉应用密码显示的分隔空格
  • 修复.NET Framework 4.0的TLS版本兼容问题(核心故障点)
    .NET Framework 4.0默认仅启用SSL 3.0、TLS 1.0协议,而Gmail当前要求所有SMTP连接必须使用TLS 1.2及以上版本,协议版本不匹配时Gmail会直接断开TCP连接,不会返回SMTP层错误信息,和你看到的报错完全吻合。
    修复方式很简单,在应用启动阶段或者Client类构造函数最开头,添加如下代码即可,不需要升级框架版本:
    // 启用TLS 1.2支持,.NET 4.0中Tls12枚举对应值为3072
    ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
    
  • 其他排查项
    • 生成应用密码时选择「其他(自定义名称)」类型,生成后立刻复制保存,页面关闭后无法再次查看该密码
    • 确认本地出口网络没有封禁587端口,可通过telnet smtp.gmail.com 587测试连通性,返回220开头的SMTP服务提示才代表网络连通正常
    • 现有代码中RefreshPort方法默认在关闭SSL时走25端口的逻辑对Gmail无效,接入Gmail时建议强制指定端口为587、强制开启SSL,避免参数误配置
    • 不要给SmtpClient单独配置网络代理,使用系统默认代理即可,如果本地挂了全局代理,需要确认代理支持SMTP协议透传

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:15:31