C# 将模板添加到电子邮件正文

C# 将模板添加到电子邮件正文,c#,asp.net-mvc,C#,Asp.net Mvc,我有这样的电子邮件服务: public async Task Execute(string email, string subject, string message) { try { string toEmail = string.IsNullOrEmpty(email) ? _emailSettings.ToEmail : email; Mail

我有这样的电子邮件服务:

public async Task Execute(string email, string subject, string message)
{
    try
    {
        string toEmail = string.IsNullOrEmpty(email)
                         ? _emailSettings.ToEmail
                         : email;
        MailMessage mail = new MailMessage()
        {
            From = new MailAddress(_emailSettings.UsernameEmail, "")
        };
        mail.To.Add(new MailAddress(toEmail));
        mail.CC.Add(new MailAddress(_emailSettings.CcEmail));

        mail.Subject = "Management System - " + subject;
        mail.Body = message;
        mail.IsBodyHtml = true;
        mail.Priority = MailPriority.High;

        using (SmtpClient smtp = new SmtpClient(_emailSettings.PrimaryDomain, _emailSettings.PrimaryPort))
        {
            smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtp.UseDefaultCredentials = false;
            smtp.Credentials = new NetworkCredential(_emailSettings.UsernameEmail, _emailSettings.UsernamePassword);
            smtp.EnableSsl = true;
            await smtp.SendMailAsync(mail);
        }
    }
    catch (Exception ex)
    {
        //do something here
    }
}
然后我将其执行到另一个方法中:

public Task SendAsync(string email, string subject, string message)
{
    Execute(email, subject, message).Wait();
    return Task.FromResult(0);
}
我有模板电子邮件模板,其中包含以下项目:

<a  href="{{url}}" target="_blank" </a>

我如何调用主体中的模板并替换服务中某个变量的{{url}}?所以改为mail.Body=message;更改为mail.Body=模板

我通常保留一个带有占位符的模板,如{0}、{1}、{2}等,因为它们直接适合string.Format。因此,在创建电子邮件时,我使用以下选项,而不是编写mail.Body=message:

我的模板如下所示:

Hello {0},

... Please <a href="{1}">click here to do XYZ</a>...
现在这种方法有一个缺点,就是您必须记录模板中的{0}对应于占位符1等


或者,您可以使用稍微冗长的占位符,例如{FirstName}或{LastName},然后使用template在电子邮件正文中替换它们。替换{FirstName},user.FirstName。替换{LastName},user.LastName。

我发现它是构建电子邮件模板最灵活的方法。再加上一些缓存以保持低编译时间,这种方法非常有效。G在我的项目中,每天发送数千封邮件。假设我的电子邮件模板位于HtmlTemplate/EnglishTemplate文件夹中,我的字符串格式应该是。mail.Body=string.Format~/HtmlTemplate/englishtTemplate.html@David实际上,在这种情况下,您必须读取该文件的内容,然后使用它。像string.FormatfileContent,…@UweKeim这样的东西看起来很有趣!如果你有时间的话,你应该发布一个答案。你的意思是在前面声明变量为:var fileContent=~/HtmlTemplate/EnglishTemplate.html,然后用作你的注释?首先,你应该完全摆脱这些毫无意义的空catch子句。其次,你的问题似乎只是要求一个字符串。替换调用。我没有看到任何与SMTP相关的东西。
Hello {0},

... Please <a href="{1}">click here to do XYZ</a>...