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

C#调用EWS发送邮件失败但VB.Net代码正常运行问题排查

故障原因
  • TLS协议版本不匹配:C#项目默认启用的TLS版本过低(.NET Framework 4.5及以前版本默认仅支持TLS1.0,目前绝大多数Exchange服务器已经禁用TLS1.0/1.1,仅允许TLS1.2及以上版本连接),VB项目大概率因为目标.NET版本更高,默认启用了高版本TLS,因此可以正常连接。
  • 次要语法/逻辑问题:你提供的C#代码中mailMessage.SendAndSaveCopy())多写了一个右括号,若编译可正常通过则为粘贴失误可忽略;另外C#字符串为不可变类型,如果你实现的ReplaceWithBR方法没有用ref修饰入参、也没有返回修改后的字符串重新赋值,那么对slogyard等变量的换行替换不会生效,不过该问题不会引发底层连接关闭报错,属于附带逻辑缺陷。
解决方法

按优先级依次尝试:

  1. 强制指定高版本TLS协议:在CreateConnection方法最开头添加指定TLS版本的代码:
// .NET 4.7及以上版本可同时兼容TLS1.2、TLS1.3,优先使用高版本
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
// 若.NET版本低于4.7,没有Tls13枚举,只保留Tls12即可
// ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
  1. 指定Exchange服务版本:初始化ExchangeService的时候指定对应服务器的Exchange版本,避免默认低版本不兼容:
// 替换为你的Exchange服务器实际版本,可选值包括Exchange2013、Exchange2016、Exchange2019等
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2016);
  1. 修复ReplaceWithBR逻辑缺陷:调整方法调用方式,确保字符串替换生效:
// 原无效写法:ReplaceWithBR(slogyard);
// 修改为接收返回值重新赋值的写法
slogyard = ReplaceWithBR(slogyard);
sScaling = ReplaceWithBR(sScaling);
sLogMfct = ReplaceWithBR(sLogMfct);
sOther = ReplaceWithBR(sOther);

对应ReplaceWithBR方法参考实现:

private string ReplaceWithBR(string input)
{
    return string.IsNullOrEmpty(input) ? input : input.Replace("\n", "<br>");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:45:06