如何在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
相关产品推荐
相关产品推荐

