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

C#使用Office 365 SmtpClient偶发“远程方关闭传输流”认证失败问题

错误原因分析

该报错是Office365 SMTP服务在SSL/TLS握手阶段主动断开连接导致的,结合「长期运行正常、近期无代码变更、随机无规律触发」的特征,常见原因有三类:

  • TLS版本不匹配:微软近年分阶段下线了Office365服务的TLS1.0、TLS1.1支持,近期你所在区域的服务节点可能刚完成低版本TLS禁用。如果程序运行在.NET Framework 4.7以下版本,默认不会主动使用TLS1.2及以上版本完成加密握手,服务端识别到低版本加密协议就会直接断开连接,表现为随机报错。
  • 并发连接限流:Office365 SMTP服务对单个发件账户的并发连接数、短时间提交请求数有明确阈值限制,你现有代码每次发信都会新建一个SmtpClient实例、重新建立TCP和TLS连接,业务高峰时连接数超出阈值就会被服务端临时限流断开。
  • 基础认证被拦截:微软目前正在全量推送Office365基础认证(SMTP AUTH)禁用策略,如果你租户管理员开启了安全默认值、或者配置了基于IP/登录风险的条件访问策略,会随机拦截基础认证请求,直接断开握手链路。

修复方案

按优先级排序可依次验证:

  1. 首先强制指定TLS版本
    如果你的程序运行在.NET Framework环境,在初始化SmtpClient之前全局添加配置:
    // 建议放在程序启动入口执行,全局生效
    System.Net.ServicePointManager.SecurityProtocol |= System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls13;
    
    优先将.NET框架升级到4.7.2及以上版本,默认会自动适配服务端支持的最高TLS版本,不需要手动指定。
  2. 优化连接复用与重试逻辑
    复用SmtpClient单例实例,避免每次发信都重新握手;同时添加指数退避重试逻辑,遇到该类连接错误时等待13秒后重试,最多重试23次,避开临时限流。
  3. 升级认证方式
    登录Office365管理员中心,确认对应发件邮箱的SMTP AUTH权限已开启,排除临时策略拦截;长期建议废弃SmtpClient方案,改用微软Graph API接口实现邮件发送,彻底规避基础认证被禁用的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:15:03