.NET API中如何利用数据库邮件模板自动发送邮件?
在.NET API中实现动态邮件模板替换的最佳方案
方法1:正则匹配变量替换(适配现有模板)
这是最贴合你当前模板格式的方案,无需修改数据库中已存储的模板:
- 先准备好变量键值对,存储用户名等实际值:
var variables = new Dictionary<string, string> { { "userName", "张三" } // 可添加更多变量,如{email}、{orderId}等 }; - 从数据库读取模板字符串后,清理掉外层的
$"和末尾的",得到纯模板内容(比如Hi, {userName}, Thanks for joining us.) - 用正则表达式匹配
{变量名}格式的占位符,替换为对应实际值:var regex = new Regex(@"\{(\w+)\}"); var finalContent = regex.Replace(template, match => { variables.TryGetValue(match.Groups[1].Value, out var value); return value ?? match.Value; // 若变量不存在,保留原占位符避免内容缺失 }); - 最后用.NET的邮件发送组件(如
SmtpClient或MailKit)发送处理后的邮件。
方法2:Razor模板引擎(复杂场景首选)
如果后续需要支持HTML邮件、循环、条件判断等复杂模板逻辑,Razor模板引擎是更健壮的选择:
- 安装
RazorEngine.NetCoreNuGet包 - 定义模板模型类,统一管理变量:
public class EmailTemplateModel { public string UserName { get; set; } // 可扩展其他字段,如UserEmail、RegisterTime等 } - 若要兼容现有模板,先做一次格式转换:把模板中的
{userName}替换为@Model.UserName;如果是新模板,直接按Razor语法编写存储 - 编译并渲染模板:
var model = new EmailTemplateModel { UserName = "张三" }; var renderedContent = RazorEngine.Engine.Razor.RunCompile(template, "uniqueTemplateKey", typeof(EmailTemplateModel), model); - 发送渲染后的邮件内容。
方法3:String.Format(简单固定场景)
如果变量数量少且固定,可修改数据库模板为索引占位符格式(如Hi, {0}, Thanks for joining us.),直接用内置方法替换:
var userName = "张三"; var finalContent = string.Format(template, userName);
此方法优点是实现简单,但扩展性差,变量顺序固定,不适合后续添加新变量的场景。
内容的提问来源于stack exchange,提问作者Sharif Rezvani
相关产品推荐
相关产品推荐

