Existe uma maneira melhor de gerar e-mail HTML em C # (para enviar via System.Net.Mail) do que usar um Stringbuilder para fazer o seguinte:
string userName = "John Doe";
StringBuilder mailBody = new StringBuilder();
mailBody.AppendFormat("<h1>Heading Here</h1>");
mailBody.AppendFormat("Dear {0}," userName);
mailBody.AppendFormat("<br />");
mailBody.AppendFormat("<p>First part of the email body goes here</p>");
e assim por diante?
Respostas:
Você pode usar a classe MailDefinition .
É assim que você o usa:
Além disso, escrevi uma postagem no blog sobre como gerar o corpo do e-mail HTML em C # usando modelos usando a classe MailDefinition .
fonte
Regex.Replace(body, pattern, replacement, RegexOptions.IgnoreCase);
para cada par chave / valor ... à luz desse detalhe, esta classe não fornece muito valor como usado acima a menos que esteja trabalhando com uma referência existente paraSystem.Web.UI.Controls
.Use a classe System.Web.UI.HtmlTextWriter.
Para HTML extensivo que inclui a criação de atributos de estilo, HtmlTextWriter é provavelmente o melhor caminho a seguir. No entanto, pode ser um pouco complicado de usar e alguns desenvolvedores gostam que a própria marcação seja facilmente lida, mas as escolhas perversas do HtmlTextWriter em relação ao recuo são um pouco estranhas.
Neste exemplo, você também pode usar XmlTextWriter de forma bastante eficaz: -
fonte
h1
tag?Resposta atualizada :
A documentação para
SmtpClient
a classe usada nesta resposta agora diz 'Obsoleto ("SmtpClient e sua rede de tipos são mal projetados, recomendamos fortemente que você use https://github.com/jstedfast/MailKit e https: // github .com / jstedfast / MimeKit em vez ") '.Fonte: https://www.infoq.com/news/2017/04/MailKit-MimeKit-Official
Resposta Original :
Usar a classe MailDefinition é a abordagem errada. Sim, é prático, mas também é primitivo e depende dos controles da IU da web - isso não faz sentido para algo que normalmente é uma tarefa do lado do servidor.
A abordagem apresentada a seguir é baseada na documentação do MSDN e na postagem de Qureshi em CodeProject.com .
NOTA: Este exemplo extrai o arquivo HTML, imagens e anexos de recursos incorporados, mas usar outras alternativas para obter fluxos para esses elementos é bom, por exemplo, strings codificadas, arquivos locais e assim por diante.
fonte
Eu uso o dotLiquid exatamente para esta tarefa.
Ele pega um modelo e preenche identificadores especiais com o conteúdo de um objeto anônimo.
Também funciona com coleções, veja alguns exemplos online .
fonte
Eu recomendaria usar modelos de algum tipo. Existem várias maneiras diferentes de abordar isso, mas essencialmente mantenha um modelo de e-mail em algum lugar (no disco, em um banco de dados, etc.) e simplesmente insira os dados principais (IE: nome do destinatário, etc.) no modelo.
Isso é muito mais flexível porque significa que você pode alterar o modelo conforme necessário, sem ter que alterar seu código. Na minha experiência, é provável que você receba solicitações de mudanças nos modelos dos usuários finais. Se você quiser ir até o fim, pode incluir um editor de modelos.
fonte
Como uma alternativa para MailDefinition, dê uma olhada em RazorEngine https://github.com/Antaris/RazorEngine .
Esta parece ser a melhor solução.
Atribuído a ...
como enviar e-mail com o modelo de e-mail c #
Por exemplo
Quais saídas ...
fonte
Emitir html feito à mão como este é provavelmente a melhor maneira, desde que a marcação não seja muito complicada. O construtor de strings só começa a pagar em termos de eficiência depois de cerca de três concatenações, então, para coisas realmente simples, string + string servem.
Além disso, você pode começar a usar os controles html (System.Web.UI.HtmlControls) e renderizá-los, dessa forma, às vezes você pode herdá-los e fazer sua própria classe para um layout condicional complexo.
fonte
Você pode querer dar uma olhada em algumas das estruturas de modelo que estão disponíveis no momento. Alguns deles são derivados do MVC, mas isso não é obrigatório. Spark é um bom exemplo.
fonte
Se você não quiser uma dependência do .NET Framework completo, há também uma biblioteca que faz seu código se parecer com:
É código aberto, você pode baixá-lo em http://sourceforge.net/projects/htmlplusplus/
Isenção de responsabilidade: sou o autor desta biblioteca, ela foi escrita para resolver exatamente o mesmo problema - envie um e-mail em HTML de um aplicativo.
fonte
Uma versão comercial que uso em produção e permite fácil manutenção é o LimiLabs Template Engine , que o utilizo há mais de 3 anos e me permite fazer alterações no modelo de texto sem ter que atualizar o código (isenções de responsabilidade, links etc.) - ele poderia ser tão simples quanto
Vale a pena dar uma olhada, como eu; depois de tentar várias respostas mencionadas aqui.
fonte