需要创建一个邮件生成器,为不同的邮件做模板

本文关键字:创建 一个 | 更新日期: 2023-09-27 18:04:38

我需要创建一个电子邮件生成器,使用不同类型的邮件模板。我做了一些非常简单的事情,在html上做替换,使用标签。它是有效的,但现在,我需要更普通的东西。让我再解释一下:我有不同的json,我用它来替换标签到html模板,例如:

{
    "Minutes": 60,
    "Machines": [
        {
           "Name": "Machine1",
           "Id": "4768"
        },
        {
           "Name": "Machine2",
           "Id":"6502"
        }
    ]
}

在本例中,我使用MINUTES作为主题,并且使用MACHINES数组,我使<href>

下面是另一个例子:

{
    "Threshold": 12,
    "Server": [
        {
           "Name": "Machine1",
           "CpuUsage": 27,
           "RamUsage": 62
        },
        {
           "Name": "Machine2",
           "CpuUsage": 25,
           "RamUsage": 57
        }
    ]
}

在这个,我需要做一个表的服务器。像这样,我有很多更多的json,应该替换成html模板。

这是使它通用的最好方法,所以,下次我需要创建另一个模板,应该很容易,只需使json格式,并根据做模板html,它应该自动工作,无需编码。谢谢!

需要创建一个邮件生成器,为不同的邮件做模板

我有同样的问题前一段时间,我已经解决了它使用SmartFormat (https://github.com/scottrippey/SmartFormat)。基本上你创建一些对象(或对象可以从反序列化json字符串创建),你将它传递给SmartFormat格式化你的文本。例如

var fmtObj = new
{
  UserFullName = "...",
  UserUserName = "...",
  WebAppUrl = "...",
  DownloadLink = "...",
  UnsubscribeLink = "...",
};

可以是匿名的也可以是全类的。如果你有这样的HTML:

var htmlBody = "Hello, <b>{UserFullName}</b>," +
               "<br><br>Your account has been created!" +
               "<br><br>Go to {WebAppUrl} to login!";

您可以使用呼叫Smart。格式:

var formattedBody = Smart.Format(htmlBody, fmtObj);

formattedBody中,您有格式化的文本。它也适用于类本身的属性(例如User.FullName)

最好的方法是创建一个视图(cshtml文件)并发送一个模型给它。这个视图就像一个模板,让你可以自由地创建一个漂亮的电子邮件:

  1. 创建视图
  2. 为视图创建一个模型(ViewModel)
  3. 在控制器中添加以下功能:

    protected string RenderPartialViewToString(string viewName, object model)
    {
         if (string.IsNullOrEmpty(viewName))
            viewName = ControllerContext.RouteData.GetRequiredString("action");
        ViewData.Model = model;
        using (StringWriter sw = new StringWriter())
        {
            ViewEngineResult viewResult =     ViewEngines.Engines
            .FindPartialView(ControllerContext, viewName);
        ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);
        return sw.GetStringBuilder().ToString();
        }
    }
    
  4. 从你的动作中调用上面的函数:

    var partialView = RenderPartialViewToString("_EmailView",
                        new EmailViewModel()
                        {
                            Email = user.Email,
                            UserName = user.UserName,
                            ...
                        });
    
  5. partialView变量现在包含电子邮件的html正文,您可以发送它。完成了!

相关文章: