como enviar o modelo de E-mail wth c#
<html>
<body>
Hi {FirstName} {LastName},
Here are your orders:
{foreach Orders}
Order ID {OrderID} Quantity : {Qty} <strong>{Price}</strong>.
{end}
</body>
</html>
Agora quero preencher todas as palavras-chave de amostra rodeadas de {} com valor real e também iterar e preencher pedidos.
procuro no google e descobri que a microsoft fornece uma classe chamada definição de Mail pelo qual pode gerar corpo de correio dinamicamente. eu tenho um código de amostra também como
MailDefinition md = new MailDefinition();
md.From = "[email protected]";
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("[email protected]", replacements, body, new System.Web.UI.Control());
pelo código acima podemos substituir o pseudo valor pelo valor real, mas não sei como iterar em detalhes de ordens e preencher dados de ordens.
por isso, se for possível usar a classe de Definição Por Correio, então, por favor, guie-me com o código de Como posso iterar em loop e gerar corpo para os detalhes das encomendas.
2 answers
A RazorEngine é uma estrutura de templação simplificada construída em torno de O novo motor de análise Razor da Microsoft, usado em ambos ASP.NET MVC3 e sitio. A RazorEngine fornece uma embalagem e serviços adicionais. construído em torno do motor de análise para permitir que a tecnologia de análise ser utilizado noutros tipos de projectos.Deixa-te usar a navalha. modelos fora de ASP.NET MVC e, em seguida, escrever algo assim ( não testado):
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);
Você não pode fazer tal lógica "complicada" com o material de substituição padrão (o tratamento de substituição é feito para ser usado apenas para variáveis simples, por exemplo nomes ou valores).
Tens de ser tu a analisar. Dependendo da complexidade (por exemplo, loops withing loops), isso pode ficar um pouco complicado. Se não queres ou precisas dessas coisas, é mais trivial. Por exemplo, use a expressão regular\{foreach (.*?)\}(.*?)\{end\}
para encontrar esses laços, e depois analise o conteúdo/grupos correspondentes da forma que necessitar. Uma vez que essa parte é feita, você pode substituir outros valores ou usar a funcionalidade de substituição padrão.
Só o lado negativo desta abordagem é o facto de ter de recriar o correio para cada destinatário (ou seja, não pode enviar correio em massa usando MailDefinition
).