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

如何在Email模板中接收并替换HTML表格内容?

如何在现有C#邮件发送系统中替换HTML表格内容?

当然可以!完全不用改变你现有的Replace替换逻辑,只需要几步小调整就能把HTML表格插入到邮件模板里,具体操作如下:


步骤1:更新模板模型类

首先给你的EmailTemplateModel添加一个用于存储表格HTML的属性:

public class EmailTemplateModel
{
    public string CallBackUrl { get; set; }
    public string UrlText { get; set; }
    public string WelcomeText { get; set; }
    public string VerifyText { get; set; }
    public string VerifyNowText { get; set; }
    public string TroubleText { get; set; }
    public string Footer { get; set; }
    // 新增表格属性,用来存放HTML表格字符串
    public string UserTable { get; set; }
}

步骤2:在控制器中赋值表格内容

把你需要插入的HTML表格字符串赋值给模型的UserTable属性:

var englishtemplatePath = "HtmlTemplate/EnglishTemplate.html"; 
var englishTemplate = Path.Combine(_hostingEnvironment.WebRootPath, englishtemplatePath); 
var englishFileContent = System.IO.File.ReadAllText(englishTemplate); 

// 直接定义表格的HTML内容(用@符号可以保留原始格式,不用转义双引号)
var userTableHtml = @"<table style=""width:100%""> 
    <tr> 
        <th>Firstname</th> 
        <th>Lastname</th> 
        <th>Age</th> 
    </tr> 
    <tr> 
        <td>Jill</td> 
        <td>Smith</td> 
        <td>50</td> 
    </tr> 
    <tr> 
        <td>Eve</td> 
        <td>Jackson</td> 
        <td>94</td> 
    </tr> 
    <tr> 
        <td>John</td> 
        <td>Doe</td> 
        <td>80</td> 
    </tr> 
</table>";

var englishEmailTemplate = new EmailTemplateModel 
{ 
    CallBackUrl = callbackurl, 
    UrlText = "text1", 
    WelcomeText = "text2", 
    VerifyText = "text3", 
    VerifyNowText = "ACTIVATE", 
    TroubleText = "text4", 
    Footer = "text5",
    // 把表格内容赋值给模型属性
    UserTable = userTableHtml
}; 

步骤3:在HTML模板中添加占位符

打开你的EnglishTemplate.html,在需要显示表格的位置插入新的占位符:

<!-- 模板其他原有内容 -->
<div class="email-content">
    <!-- 这里是你想放表格的位置 -->
    {{UserTable}}
</div>
<!-- 模板其他原有内容 -->

步骤4:更新邮件服务的替换逻辑

在Execute方法里,新增一行针对{{UserTable}}的替换代码:

public async Task Execute(string email, string subject, EmailTemplateModel model, string template) 
{ 
    try 
    { 
        string toEmail = string.IsNullOrEmpty(email) ? _emailSettings.ToEmail : email; 
        MailMessage mail = new MailMessage() { From = new MailAddress(_emailSettings.UsernameEmail, "Subject") }; 
        mail.To.Add(new MailAddress(toEmail)); 
        mail.CC.Add(new MailAddress(_emailSettings.CcEmail)); 
        mail.Subject = subject; 
        mail.Body = template.Replace("{{CallBackUrl}}", model.CallBackUrl) 
            .Replace("{{UrlText}}", model.UrlText) 
            .Replace("{{WelcomeText}}", model.WelcomeText) 
            .Replace("{{VerifyText}}", model.VerifyText) 
            .Replace("{{VerifyNowText}}", model.VerifyNowText) 
            .Replace("{{TroubleText}}", model.TroubleText) 
            .Replace("{{Footer}}", model.Footer)
            // 新增表格占位符的替换
            .Replace("{{UserTable}}", model.UserTable); 
        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) 
    { 
        // 你的异常处理逻辑
    } 
}

额外小提示

如果表格内容是动态生成的(比如从数据库读取用户数据生成行),可以用StringBuilder来拼接HTML,示例如下:

var tableBuilder = new StringBuilder();
tableBuilder.Append("<table style=\"width:100%\"><tr><th>Firstname</th><th>Lastname</th><th>Age</th></tr>");

// 假设这是从数据库获取的用户列表
var users = new List<YourUserModel> { /* 这里是你的用户数据 */ };
foreach(var user in users)
{
    tableBuilder.Append($"<tr><td>{user.FirstName}</td><td>{user.LastName}</td><td>{user.Age}</td></tr>");
}
tableBuilder.Append("</table>");

englishEmailTemplate.UserTable = tableBuilder.ToString();

这样就能灵活生成动态表格,同时完全兼容你现有的替换逻辑啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:15:57