¿Existe una mejor manera de generar correo electrónico HTML en C # (para enviar a través de System.Net.Mail), que usar un Stringbuilder para hacer lo siguiente:
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>");
¿y así sucesivamente y así sucesivamente?
Respuestas:
Puede utilizar la clase MailDefinition .
Así es como se usa:
Además, escribí una publicación de blog sobre cómo generar el cuerpo de un correo electrónico HTML en C # usando plantillas usando la clase MailDefinition .
fuente
Regex.Replace(body, pattern, replacement, RegexOptions.IgnoreCase);
para cada par clave / valor ... a la luz de ese detalle, esta clase no proporciona mucho valor como se usó anteriormente a menos que trabaje con una referencia existente aSystem.Web.UI.Controls
.Utilice la clase System.Web.UI.HtmlTextWriter.
Para HTML extenso que incluye la creación de atributos de estilo, HtmlTextWriter es probablemente la mejor manera de hacerlo. Sin embargo, puede ser un poco complicado de usar y a algunos desarrolladores les gusta que el marcado en sí sea fácil de leer, pero las opciones perversamente de HtmlTextWriter con respecto a la sangría son un poco extrañas.
En este ejemplo, también puede usar XmlTextWriter con bastante eficacia: -
fuente
h1
etiqueta?Respuesta actualizada :
La documentación de
SmtpClient
la clase utilizada en esta respuesta ahora dice: 'Obsolete ("SmtpClient y su red de tipos están mal diseñados, le recomendamos encarecidamente que use https://github.com/jstedfast/MailKit y https: // github .com / jstedfast / MimeKit en lugar de ") '.Fuente: https://www.infoq.com/news/2017/04/MailKit-MimeKit-Official
Respuesta original :
Usar la clase MailDefinition es el enfoque incorrecto. Sí, es útil, pero también es primitivo y depende de los controles de la interfaz de usuario web; eso no tiene sentido para algo que suele ser una tarea del lado del servidor.
El enfoque que se presenta a continuación se basa en la documentación de MSDN y la publicación de Qureshi en CodeProject.com .
NOTA: Este ejemplo extrae el archivo HTML, las imágenes y los archivos adjuntos de los recursos incrustados, pero está bien usar otras alternativas para obtener flujos de estos elementos, por ejemplo, cadenas codificadas, archivos locales, etc.
fuente
Utilizo dotLiquid exactamente para esta tarea.
Toma una plantilla y llena identificadores especiales con el contenido de un objeto anónimo.
También funciona con colecciones, vea algunos ejemplos en línea .
fuente
Recomendaría usar plantillas de algún tipo. Hay varias formas diferentes de abordar esto, pero esencialmente mantenga una plantilla del correo electrónico en algún lugar (en el disco, en una base de datos, etc.) y simplemente inserte los datos clave (IE: nombre del destinatario, etc.) en la plantilla.
Esto es mucho más flexible porque significa que puede modificar la plantilla según sea necesario sin tener que modificar su código. En mi experiencia, es probable que reciba solicitudes de cambios en las plantillas de los usuarios finales. Si quieres hacer todo lo posible, puedes incluir un editor de plantillas.
fuente
Como alternativa a MailDefinition, eche un vistazo a RazorEngine https://github.com/Antaris/RazorEngine .
Esta parece una mejor solución.
Atribuido a ...
cómo enviar correo electrónico con la plantilla de correo electrónico c #
P.ej
Qué salidas ...
fuente
Emitir html hecho a mano como este es probablemente la mejor manera, siempre que el marcado no sea demasiado complicado. El constructor de cadenas solo comienza a pagarle en términos de eficiencia después de aproximadamente tres concatenaciones, por lo que para cosas realmente simples, cadena + cadena funcionará.
Aparte de eso, puede comenzar a usar los controles html (System.Web.UI.HtmlControls) y renderizarlos, de esa manera a veces puede heredarlos y crear sus propias clases para un diseño condicional complejo.
fuente
Es posible que desee echar un vistazo a algunos de los marcos de plantilla que están disponibles en este momento. Algunos de ellos son derivados como resultado de MVC, pero eso no es obligatorio. Spark es uno bueno.
fuente
Si no desea una dependencia en .NET Framework completo, también hay una biblioteca que hace que su código se vea así:
Es de código abierto, puede descargarlo desde http://sourceforge.net/projects/htmlplusplus/
Descargo de responsabilidad: soy el autor de esta biblioteca, fue escrito para resolver exactamente el mismo problema: envíe un correo electrónico HTML desde una aplicación.
fuente
Una versión comercial que utilizo en producción y que permite un fácil mantenimiento es LimiLabs Template Engine , lo he estado usando durante más de 3 años y me permite realizar cambios en la plantilla de texto sin tener que actualizar el código (descargos de responsabilidad, enlaces, etc.). podría ser tan simple como
Vale la pena echarle un vistazo, como hice yo; después de intentar varias respuestas mencionadas aquí.
fuente