Enviar un correo como HTML y Texto sin formato in.net


Estoy enviando correo desde mi aplicación C#, usando el SmtpClient. Funciona muy bien, pero tengo que decidir si quiero enviar el correo como Texto sin formato o HTML. Me pregunto, ¿hay alguna manera de enviar ambos? Creo que eso se llama multiparte.

Busqué un poco en Google, pero la mayoría de los ejemplos esencialmente no usaron SmtpClient, sino que compusieron todo el cuerpo SMTP, lo que es un poco "aterrador", así que me pregunto si algo está construido en. net Framework 3.0.

Si no, ¿hay alguna realmente bien utilizada/robusta ¿Biblioteca de Terceros para enviar correos electrónicos?

 50
Author: Michael Stum, 2008-09-05

6 answers

Lo que quiere hacer es usar la propiedad AlternateViews en el MailMessage

Http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews.aspx

 44
Author: Nick Berardi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-04 21:07:00

La Documentación de MSDN parece perder una cosa, sin embargo, tuve que configurar el tipo de contenido manualmente, pero por lo demás, funciona como un encanto: -)

MailMessage msg = new MailMessage(username, nu.email, subject, body);
msg.BodyEncoding = Encoding.UTF8;
msg.SubjectEncoding = Encoding.UTF8;

AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlContent);
htmlView.ContentType = new System.Net.Mime.ContentType("text/html");
msg.AlternateViews.Add(htmlView);
 56
Author: Michael Stum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-04 21:57:11

Solo quiero añadir que puede usar constantes definidas MediaTypeNames.Text.Html y MediaTypeNames.Text.Plain en lugar de "text/html" y "text/plain", que siempre es una forma preferible. Está en el espacio de nombres System.Net.Mime.

Así que en el ejemplo anterior, sería:

AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlContent, null, MediaTypeNames.Text.Html);
 29
Author: Greg B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-15 08:31:39

Solo voy a poner una nota aquí para cualquiera que tenga problemas y encuentre su camino a esta página: a veces, los servidores SMTP de Outlook reconvertirán el correo electrónico saliente. Si está viendo que su cuerpo de texto sin formato se desvanece por completo, y nada más que archivos adjuntos codificados con base64, puede ser porque su servidor está volviendo a codificar el correo electrónico. El servidor SMTP de Google no vuelve a codificar el correo electrónico: intente enviarlo allí y vea qué sucede.

 11
Author: Aric TenEyck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-28 17:38:55

Además de usar las vistas AlternateViews para agregar tanto la vista html como la vista de texto sin formato, asegúrese de no configurar también el cuerpo del objeto Mail Message.

// do not do this: 
var msg = new MailMessage(model.From, model.To);
msg.Body = compiledHtml;  

Ya que hará que su correo electrónico contenga el contenido html en ambas vistas, anulando las vistas alternativas.

 7
Author: user1852503,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-25 00:12:26

Para las personas(como yo) que han tenido el problema de gmail mostrando la parte de texto plano en lugar de la parte html.

Gmail parece mostrar siempre la última parte de tu mensaje.

Entonces, si agregaste la parte html antes de la parte de texto plano, es probable que gmail siempre muestre la variante de texto plano.

Para arreglar esto, simplemente puede agregar la parte de texto sin formato antes de la parte html.

 4
Author: Pieter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-20 12:55:07