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

C#中发送邮件前替换邮件模板内容的方法及Replace方法失效问题排查

解决C#邮件模板占位符替换失效的问题

嘿,你的问题其实很常见——核心原因是C#里的字符串是不可变类型,你调用Replace方法后没有把结果存回变量里,所以原字符串根本没被修改!

问题根源

string.Replace()方法不会改变原字符串本身,它会返回一个完成替换操作的新字符串。你之前的代码只是调用了Replace,但没把新结果赋值给mailbody,所以mm.Body还是原来的模板内容,自然显示##UserName。

修正后的代码

直接修改你的代码,把Replace的返回值重新赋值给mailbody,另外别忘了开启HTML邮件解析,否则模板里的HTML标签会被当成纯文本显示:

System.Net.Mail.MailMessage mm = new System.Net.Mail.MailMessage();
string mailbody = string.Empty;
using (StreamReader reader = new StreamReader(HttpContext.Current.Server.MapPath("mailtemplate.html")))
{
    mailbody = reader.ReadToEnd();
}
// 关键:将替换后的新字符串赋值回mailbody
mailbody = mailbody.Replace("##UserName", "jack");
mm.Body = mailbody;
// 必须设置这个属性,让邮件客户端解析HTML内容
mm.IsBodyHtml = true;

额外的模板优化建议

你提供的HTML模板有两个小问题,可能导致邮件显示异常,建议修正:

  1. 多了一个冗余的</div>标签
  2. <span style='font-size:24px'><span>未正确闭合

修正后的模板代码:

<div> 
    <table> 
        <tr> 
            <td> ##UserName<span style='font-size:24px'></span></td> 
        </tr> 
    </table> 
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:47:41