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模板有两个小问题,可能导致邮件显示异常,建议修正:
- 多了一个冗余的
</div>标签 <span style='font-size:24px'><span>未正确闭合
修正后的模板代码:
<div> <table> <tr> <td> ##UserName<span style='font-size:24px'></span></td> </tr> </table> </div>
内容的提问来源于stack exchange,提问作者georgetovrea
相关产品推荐
相关产品推荐

