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

使用ExchangeServices.SendEmail时正文含无效字符的处理方案问询

解决Exchange发送含堆栈跟踪邮件的无效字符问题

核心方案:过滤非法控制字符

Exchange的邮件内容禁止大部分ASCII控制字符(0x00-0x1F区间内,仅允许\t、\n、\r这类常用格式字符),直接过滤所有不符合要求的字符即可,无需提前枚举所有非法字符。

实现代码示例

方法1:正则表达式替换

用正则匹配所有非打印/非法控制字符,替换为空字符串或空格:

// 过滤body中的非法字符:保留可打印ASCII字符+常用格式符(\t\n\r)
string cleanedBody = Regex.Replace(body, @"[^\x09\x0A\x0D\x20-\x7E]", "");
// 调用发送邮件方法
ExchangeServices.SendEmail(creds, fromEmailAddr, toEmailAddr, subject, cleanedBody);

正则说明:[^\x09\x0A\x0D\x20-\x7E] 匹配所有不在允许范围内的字符,其中:

  • \x09:制表符
  • \x0A:换行符
  • \x0D:回车符
  • \x20-\x7E:所有可打印ASCII字符(空格到波浪线)

方法2:遍历字符过滤

若不想使用正则,可逐个检查字符并保留合法项:

StringBuilder sb = new StringBuilder();
foreach (char c in body)
{
    // 允许制表符、换行、回车,以及可打印ASCII字符
    if (c == '\t' || c == '\n' || c == '\r' || (c >= ' ' && c <= '~'))
    {
        sb.Append(c);
    }
    // 可选:将非法字符替换为占位符,比如[INVALID_CHAR]
    // else sb.Append("[INVALID_CHAR]");
}
string cleanedBody = sb.ToString();
ExchangeServices.SendEmail(creds, fromEmailAddr, toEmailAddr, subject, cleanedBody);

额外提示

  • 邮件主题(subject)也可能出现类似问题,建议同步应用过滤逻辑
  • 若需要保留Unicode字符,可调整过滤范围(Exchange对Unicode支持无问题,主要限制为ASCII控制字符)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:43:13