como enviar o modelo de E-mail wth c#

Acho que tenho de enviar correio ao cliente com os detalhes do cliente e os detalhes da encomenda. eu tenho dados html de modelo em um arquivo html.os dados do cliente estão lá e, assim como o detalhe da ordem também está lá no mesmo arquivo de modelo html. o meu html parece

<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.

Author: Kiquenet, 2012-05-09

2 answers

Como alternativa à definição por correio, dá uma vista de olhos à RazorEngine. https://github.com/Antaris/RazorEngine.
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);
 43
Author: David Tischler, 2017-12-10 17:29:01

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).

 1
Author: Mario, 2012-05-09 09:07:49