RazorEngineを使ったメールテンプレート作成方法。
テンプレートに埋め込むモデルを定義する。
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()」で埋め込みたかったが対応していないようだ。