Tho*_*mas 23 c# email-templates
假设我需要通过客户详细信息和订单详细信息向客户发送邮件.我在html文件中有模板html数据.客户数据存在,并且订单详细信息也存在于同一个html模板文件中.我的HTML看起来像
<html>
<body>
Hi {FirstName} {LastName},
Here are your orders:
{foreach Orders}
Order ID {OrderID} Quantity : {Qty} <strong>{Price}</strong>.
{end}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
现在我想用{}填充所有带有实际值的示例关键字,并迭代并填写订单.
我搜索谷歌,发现微软提供了一个名为MailDefinition的类, 通过它我们可以动态生成邮件正文.我有一个示例代码也喜欢
MailDefinition md = new MailDefinition();
md.From = "test@domain.com";
md.IsBodyHtml = true;
md.Subject = "Test of MailDefinition";
ListDictionary replacements = new ListDictionary();
replacements.Add("<%Name%>", "Martin");
replacements.Add("<%Country%>", "Denmark");
string body = "
Hello <%Name%> You're from <%Country%>.";
MailMessage msg = md.CreateMailMessage("you@anywhere.com", replacements, body, new System.Web.UI.Control());
Run Code Online (Sandbox Code Playgroud)
通过上面的代码,我们可以用实际值替换伪值,但我不知道如何迭代Orders详细信息并填充订单数据.
所以,如果可以使用MailDefinition类,那么请指导我如何迭代循环并生成订单详细信息的代码.
小智 44
作为MailDefinition的替代方案,请查看RazorEngine https://github.com/Antaris/RazorEngine.
RazorEngine是一个简化的模板框架,围绕微软新的Razor解析引擎构建,用于ASP.NET MVC3和Web Pages.RazorEngine提供了一个围绕解析引擎构建的包装器和附加服务,以允许在其他项目类型中使用解析技术.
它允许你在ASP.NET MVC之外使用razor模板,然后写这样的东西(未经测试):
string template =
@"<html>
<body>
Hi @Model.FirstName @Model.LastName,
Here are your orders:
@foreach(var order in Model.Orders) {
Order ID @order.Id Quantity : @order.Qty <strong>@order.Price</strong>.
}
</body>
</html>";
var model = new OrderModel {
FirstName = "Martin",
LastName = "Whatever",
Orders = new [] {
new Order { Id = 1, Qty = 5, Price = 29.99 },
new Order { Id = 2, Qty = 1, Price = 9.99 }
}
};
string mailBody = Razor.Parse(template, model);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43477 次 |
| 最近记录: |