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

C# MailMessage调用exe时命令行传入换行失效问题排查求助

命令行传参给C# MailMessage时换行失效的排查方案

1. 先查命令行的转义规则

不同终端对换行符的传递逻辑不一样,别直接输\n:

  • Windows CMD:没法直接输入\n作为换行,得用延迟扩展构造换行参数,比如先定义换行变量:
    setlocal enabledelayedexpansion
    set "newline=^
    "
    MyMailSender.exe "这是第一行!newline!这是第二行"
    
    注意set "newline=^后面要手动敲回车,空一行再闭合引号。
  • PowerShell:用反引号+n表示换行,+r表示回车,包裹在双引号里传递:
    .\MyMailSender.exe "第一行`r`n第二行"
    

2. 检查程序接收参数的处理逻辑

C#的args数组会把命令行传入的\n当成普通字符串(两个字符\和n),不是真正的换行符。如果是这种情况,要手动替换:

// 假设邮件内容是第一个参数
string rawContent = args[0];
// 把转义的\n或\r\n替换成系统换行符
string processedContent = rawContent.Replace("\\n", Environment.NewLine)
                                   .Replace("\\r\\n", Environment.NewLine);

另外,一定要把带换行的参数用双引号包裹,否则会被命令行拆成多个参数,导致内容截断。

3. 确认MailMessage的内容格式设置

MailMessage的换行逻辑分纯文本和HTML两种模式:

  • 纯文本模式:必须用\r\n(邮件标准换行)或者Environment.NewLine,要确保IsBodyHtml=false:
    var mail = new MailMessage();
    mail.IsBodyHtml = false;
    mail.Body = processedContent; // 这里的processedContent要包含真正的换行符
    
  • HTML模式:普通换行符不会生效,必须替换成<br>标签,同时设置IsBodyHtml=true:
    var mail = new MailMessage();
    mail.IsBodyHtml = true;
    mail.Body = processedContent.Replace(Environment.NewLine, "<br>");
    

4. 调试验证关键步骤

在程序里加一段代码,输出接收到的参数的字符编码,确认换行符是否真的传进来了:

Console.WriteLine("Received argument chars (ASCII):");
foreach (char c in args[0])
{
    Console.Write($"{(int)c} "); // 换行符是10,回车是13
}

如果输出里没有10或13,说明命令行参数没传对换行符;如果有,但邮件里还是没换行,就是MailMessage的格式设置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:15:12