RazorEngineを使ったメールテンプレート作成方法。
antaris.github.io
テンプレートに埋め込むモデルを定義する。
namespace MailApp.Models.Mail
{
public class Template
{
public string Name { get; set; }
}
}
テンプレートファイルを指定して、その中身をすべて読み込む。
var templateTextPath = "~/MailTemplates/template.txt";
var templateHtmlPath = "~/MailTemplates/template.cshtml";
var templateText = File.ReadAllText(HttpContext.Current.Server.MapPath(templateTextPath));
var templateHtml = File.ReadAllText(HttpContext.Current.Server.MapPath(templateHtmlPath));
テンプレートファイルの中身は以下の通り。まずはテキストメール用。
@Model.Name さん
こんにちは!
次はHTMLメール用。
<html>
<head>
<title>bizsky ボックス</title>
<style>
'@'マークを使うときは'@@'と記述する。
</style>
</head>
<body>
<div>@Model.Name さん</div>
<div>こんにちは!</div>
</body>
</html>
テンプレートをRazorEngineに追加してコンパイルする。
var service = Engine.Razor;
service.AddTemplate("templateHtml", templateHtml);
service.Compile("templateHtml", typeof(Template));
service.AddTemplate("templateText", templateText);
service.Compile("templateText", typeof(Template))
テンプレートにモデルを埋め込んで結合する。
var htmlBody = service.Run("templateHtml", typeof(Template), new Template { Name = "Taro Yamada" });
var textBody = service.Run("templateText", typeof(Template), new Template { Name = "Taro Yamada" });
スタイルを「@Styles.Render()」で埋め込みたかったが対応していないようだ。