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

how to replace some content in mail template before send in 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。把returns替换成string,就是你要找的结果字符串