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

.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.NetCore NuGet包
  • 定义模板模型类,统一管理变量:
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:55:00