Мне приходилось делать это пару раз. Первоначально я использовал шаблонизатор ASP.Net, основанный, как мне кажется, на блоге Рика Строля. Это работало, но всегда была какая-то проблема, против которой я бился головой.
Я перешел на использование шаблонного движка NVelocity и обнаружил, что это действительно простой способ создания и поддержки шаблонов электронной почты. Существует ряд других шаблонизаторов, и я подозреваю, что в следующий раз я могу серьезно взглянуть на Razor engine .
Код для слияния значений в шаблон:
private string Merge(ManualTypeEnum manualType, Object mergeValues)
{
var body = "";
var templateFile = string.Format("{0}MailTemplate.vm", manualType);
var velocity = new VelocityEngine();
var props = new ExtendedProperties();
props.AddProperty("file.resource.loader.path", Config.EmailTemplatePath);
velocity.Init(props);
var template = velocity.GetTemplate(templateFile);
var context = new VelocityContext();
context.Put("Change", mergeValues);
using (var writer = new StringWriter())
{
template.Merge(context, writer);
body = writer.ToString();
}
return body;
}
Значения для слияния передаются как анонимный объект и могут включать в себя различные типы, включая списки и т. Д., Например,
var emailBody = Merge(newDocument.ManualType, new
{
ManualType = newDocument.ManualType.ToString(),
Message = change.Message,
NewTitle = newDocument.Title ?? "",
NewVersion = newDocument.Version ?? "",
Contact = From,
Changes = change.ToList(),
});