如何发送电子邮件和电子邮件模板c#

假设我需要通过客户详细信息和订单详细信息向客户发送邮件。 我在html文件中有模板html数据。存在数据,并且订单详细信息也存在于同一个html模板文件中。 我的HTML看起来像

  Hi {FirstName} {LastName}, Here are your orders: {foreach Orders} Order ID {OrderID} Quantity : {Qty} {Price}. {end}   

现在我想用{}填充所有带有实际值的示例关键字,并迭代并填写订单。

我搜索谷歌,发现微软提供了一个名为MailDefinition的类,通过它我们可以动态生成邮件正文。 我有一个示例代码也喜欢

 MailDefinition md = new MailDefinition(); md.From = "test@domain.com"; md.IsBodyHtml = true; md.Subject = "Test of MailDefinition"; ListDictionary replacements = new ListDictionary(); replacements.Add("", "Martin"); replacements.Add("", "Denmark"); string body = " Hello  You're from ."; MailMessage msg = md.CreateMailMessage("you@anywhere.com", replacements, body, new System.Web.UI.Control()); 

通过上面的代码,我们可以用实际值替换伪值,但我不知道如何迭代Orders详细信息并填充订单数据。

因此,如果可以使用MailDefinition类,那么请指导我如何迭代循环并生成订单详细信息的代码。

作为MailDefinition的替代方案,请查看RazorEngine https://github.com/Antaris/RazorEngine

RazorEngine是一个简化的模板框架,围绕微软新的Razor解析引擎构建,用于ASP.NET MVC3和Web Pages。 RazorEngine提供了一个围绕解析引擎构建的包装器和附加服务,以允许解析技术用于其他项目类型

它允许您在ASP.NET MVC之外使用剃刀模板,然后编写类似这样的内容( 未经过测试 ):

 string template = @"  Hi @Model.FirstName @Model.LastName, Here are your orders: @foreach(var order in Model.Orders) { Order ID @order.Id Quantity : @order.Qty @order.Price. }  "; 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); 

您无法使用默认替换内容执行此类“复杂”逻辑(占位符处理仅用于简单变量,例如名称或值)。

你必须自己做解析。 根据复杂性(例如循环带有循环),这可能会有点棘手。

如果你不想要或不需要这样的东西,那就更微不足道了。 例如,使用正则表达式\{foreach (.*?)\}(.*?)\{end\}来查找此类循环,然后以您需要的方式解析内容/匹配的组。 完成该部分后,您可以替换其他值或使用默认替换function。

这种方法的唯一缺点是你必须为每个收件人重新创建邮件(即你不能使用MailDefinition批量发送邮件)。