You need to enable JavaScript to run this app. 使用AlternateView发送纯文本邮件时如何正常显示换行符
优惠活动
大模型
产品
解决方案
定价
更多

使用AlternateView发送纯文本邮件时如何正常显示换行符

问题根源

你碰到的换行显示问题,根本不是纯文本AlternateView的配置有问题,是代码里的错位逻辑把邮件的渲染流程搞乱了:

  • 视图优先级错配:绝大多数邮件客户端处理多视图邮件时,会优先选择列表最末尾、自身能正常解析的内容展示。你当前的代码直接把带\n的纯文本字符串塞给了HTML视图,而HTML渲染规则会把所有换行、连续空格都折叠成单个空格,客户端实际打开的是这个内容错误的HTML视图,纯文本视图根本没被调用,自然看不到换行。
  • 邮件结构不规范:你设置了IsBodyHtml = false但没有给msg.Body赋值,直接添加两个AlternateView,生成的MIME分层结构缺少主内容锚点,部分严格遵循规范的邮件客户端会直接丢弃结构异常的纯文本视图,不做渲染。
  • 纯文本格式不兼容:按照邮件传输的通用规范,纯文本内容的换行必须使用CRLF(也就是\r\n),仅写\n的话,部分老版本或者严格遵循标准的客户端会把它识别为普通空格,不会触发换行渲染。
具体修正方法

按照MIME的通用规范调整结构和内容匹配即可,不需要额外修改底层配置:

  1. 不要用同一个字符串同时作为纯文本和HTML的视图内容:纯文本版本用\r\n做正常逻辑换行,HTML版本把对应换行替换成<br>标签,适配HTML的渲染规则。
  2. 给主msg.Body赋值和纯文本视图一致的内容,补全邮件的主结构,符合通用客户端的解析预期。
  3. 添加AlternateView时顺序不要搞反:先加纯文本视图,再加HTML视图——纯文本是所有客户端都能打开的兜底内容,放在前面;HTML是体验更好的渲染内容,放在后面让支持的客户端优先选择。

修正后的可用代码示例:

var msg = new MailMessage();
// 纯文本内容使用标准CRLF换行
var plainBody = "Test sending\r\nA newline character\r\nIn a plaintext email";
// HTML版本把换行替换为<br>标签
var htmlBody = "Test sending<br>A newline character<br>In a plaintext email";

msg.From = new MailAddress(fromAddr);
msg.To = new MailAddress(toAddr);
msg.Subject = "Test";
// 将主Body设为纯文本内容,和纯文本视图保持一致
msg.Body = plainBody;
msg.BodyEncoding = Text.Encoding.UTF8;
msg.IsBodyHtml = false;

// 先添加兜底的纯文本视图
var textView = AlternateView.CreateAlternateViewFromString(
    plainBody,
    Text.Encoding.UTF8,
    Net.Mime.MediaTypeNames.Text.Plain
);
// 再添加优先级更高的HTML视图
var htmlView = AlternateView.CreateAlternateViewFromString(
    htmlBody,
    Text.Encoding.UTF8,
    Net.Mime.MediaTypeNames.Text.Html
);

msg.AlternateViews.Add(textView);
msg.AlternateViews.Add(htmlView);

var client = new SmtpClient(smtpServer);
client.Send(msg);
额外提醒
  • 如果不需要发送HTML版本的邮件,直接删掉HTML视图即可,剩下的结构和你之前直接设置msg.Body的效果完全一致,不会出现换行异常的问题。
  • 不要手动给长纯文本内容做拆行处理,.NET的SmtpClient会自动按照邮件规范的行长度要求做格式转换,只需要把内容本身的逻辑换行处理正确即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 12:06:10