如何在 C# 中发送之前替换邮件模板中的某些内容?

问题描述

我创建了一个邮件模板,但是 cs 文件中的某些值将是动态的,我尝试在邮件模板中使用 ##username , 并使用 mailbody.Replace("##UserName","jack");替换邮件模板中的用户名值,但在我的邮件中仍然显示##UserName, 请问如何在C#中发送之前替换邮件模板中的一些内容

我的邮件模板:mailtemplate.html:

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

我的 sendmail.aspx.cs :

 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.Replace("##UserName","jack");
mm.Body = mailbody;

解决方法

您只是在使用您的“原始”邮件正文。

你需要这样做

mailbody = mailbody.Replace("##UserName","jack");

然后 mailbody 将具有替换的文本....如果不是您只是替换,而是丢弃结果...

在 C# 中,字符串是不可变的,所以你会得到一个新的,并带有所需的替换

所以这个

mailbody = mailbody.Replace("##UserName","jack");
mm.Body = mailbody;

或者这个

var replacedBody = mailbody.Replace("##UserName","jack");
mm.Body = replacedBody;

或者这个

mm.Body = mailbody.Replace("##UserName","jack");;

应该可以。您只需要使用 Replace 的返回值而不是原始字符串(您在做什么)

看看here at the docs。替换返回一个string,这是您要查找的结果字符串