net mail library example emails c# asp.net email

library - smtpclient c# gmail



C#Envíe tanto mensajes de texto HTML como de texto, ¿lo más elegante? (6)

¿Es la mejor práctica enviar correos electrónicos tanto de HTML como de texto?

Si solo envío HTML, ¿cuáles son los peligros?

Estoy pensando algo como esto a continuación de

http://johnnycoder.com/blog/2009/04/15/net-mailmessage-linkedresources-alternateviews-and-exceptions/

try { // Assign a sender, recipient and subject to new mail message MailAddress sender = new MailAddress("[email protected]", "Sender"); MailAddress recipient = new MailAddress("[email protected]", "Recipient"); MailMessage m = new MailMessage(sender, recipient); m.Subject = "Test Message"; // Define the plain text alternate view and add to message string plainTextBody = "You must use an email client that supports HTML messages"; AlternateView plainTextView = AlternateView.CreateAlternateViewFromString( plainTextBody, null, MediaTypeNames.Text.Plain); m.AlternateViews.Add(plainTextView); // Define the html alternate view with embedded image and // add to message. To reference images attached as linked // resources from your HTML message body, use "cid:contentID" // in the <img> tag... string htmlBody = "<html><body><h1>Picture</h1><br>" + "<img src=/"cid:SampleImage/"></body></html>"; AlternateView htmlView = AlternateView.CreateAlternateViewFromString( htmlBody, null, MediaTypeNames.Text.Html); // ...and then define the actual LinkedResource matching the // ContentID property as found in the image tag. In this case, // the HTML message includes the tag // <img src=/"cid:SampleImage/"> and the following // LinkedResource.ContentId is set to "SampleImage" LinkedResource sampleImage = new LinkedResource("sample.jpg", MediaTypeNames.Image.Jpeg); sampleImage.ContentId = "SampleImage"; htmlView.LinkedResources.Add(sampleImage); m.AlternateViews.Add(htmlView); // Finally, configure smtp or alternatively use the // system.net mailSettings SmtpClient smtp = new SmtpClient { Host = "smtp.example.com", UseDefaultCredentials = false, Credentials = new NetworkCredential("username", "password") }; //<system.net> // <mailSettings> // <smtp deliveryMethod="Network"> // <network host="smtp.example.com" // port="25" defaultCredentials="true"/> // </smtp> // </mailSettings> //</system.net> smtp.Send(m); } catch (ArgumentException) { throw new ArgumentException("Undefined sender and/or recipient."); } catch (FormatException) { throw new FormatException("Invalid sender and/or recipient."); } catch (InvalidOperationException) { throw new InvalidOperationException("Undefined SMTP server."); } catch (SmtpFailedRecipientException) { throw new SmtpFailedRecipientException( "The mail server says that there is no mailbox for recipient"); } catch (SmtpException ex) { // Invalid hostnames result in a WebException InnerException that // provides a more descriptive error, so get the base exception Exception inner = ex.GetBaseException(); throw new SmtpException("Could not send message: " + inner.Message); }


Compartiendo mi experiencia con el envío tanto de HTML como de texto en un solo correo electrónico: He creado un mensaje de correo electrónico que tiene 2 vistas: texto y html usando las clases C # AlternateView.

¿Qué obtuve?

En Mac, probado en High Sierra: la aplicación Apple Mail estaba mostrando el Html. Si el orden de los mensajes se invierte: Html - texto, Apple Mail mostrará la vista de texto. La conclusión: Apple Mail está utilizando la última vista como predeterminada.

En Windows, Outlook 2010: Microsoft Outlook de forma predeterminada usa la vista Html. El orden de las vistas en el correo electrónico no importa: html, texto; texto, html;

Si por alguna razón seleccionó una configuración para mostrar los mensajes entrantes como texto, Outlook la convertirá en texto. Incluso si envía la versión de texto de su correo electrónico (que podría ser ligeramente diferente de la versión HTML y se formateó para que se vea bonita) no se usará.

Por lo tanto, no necesita enviar la versión de texto de su correo electrónico si sabe que sus clientes usan Outlook y la versión HTML está seleccionada como predeterminada.

Mozilla Thunderbird respeta su configuración y muestra la versión correcta de HTML o texto de su correo electrónico. Funciona correctamente en Mac y en Windows

Espero eso ayude


Creo que sí, la mejor práctica es enviar ambos. La razón (c & p de wikipedia):

El formato de correo electrónico predeterminado según RFC 2822 es texto sin formato. Por lo tanto, el software de correo electrónico no es necesario para admitir el formato HTML. El envío de correos electrónicos formateados en HTML puede provocar problemas al final del destinatario si es uno de esos clientes que no lo admiten. En el peor de los casos, el destinatario verá el código HTML en lugar del mensaje deseado.


Diría que, en el mundo de hoy, el enfoque de "mejores prácticas" sería garantizar que envíe su mensaje como texto simple y HTML (si realmente desea enviar mensajes de correo electrónico HTML).

Ah, y asegúrese de enviar realmente el contenido en la vista de texto sin formato, en lugar de una sola frase que diga "Debe usar un cliente de correo electrónico que admita mensajes HTML". Google Mail adopta este enfoque, y parece funcionar perfectamente, permitiendo vistas "ricas" en clientes de PC de pleno derecho, al tiempo que permite vistas "mínimas" en dispositivos más restringidos (es decir, teléfonos móviles / celulares).

Si desea adoptar una visión purista, no estaría enviando correos electrónicos HTML en absoluto, ni nunca "adjuntará" un archivo binario a un correo electrónico. Ambas corrupciones del estándar de correo electrónico original, que solo fue originalmente pensado para texto sin formato. (Vea las opiniones de algunas personas sobre esto here y here )

Sin embargo, en el mundo real pragmático de la actualidad, el correo electrónico HTML es muy real y muy aceptable. La desventaja principal de enviar un correo electrónico HTML es si el destinatario verá el correo electrónico de la manera que usted pretendía que lo viera. Este es el mismo problema con el que los diseñadores web han luchado durante años; hacer que sus sitios web se vean "perfectos" en todos los navegadores posibles (aunque hoy en día es mucho más fácil de lo que era hace muchos años).

Similar a asegurar que un sitio web funcione correctamente sin requerir Javascript, al enviar sus correos electrónicos como HTML y texto sin formato, se asegurará de que sus correos electrónicos se degraden con elegancia para que las personas lean sus correos electrónicos en (por ejemplo) pequeños dispositivos móviles (algo que se está volviendo cada vez más frecuente en estos días, y que puede o no ser capaz de generar un correo electrónico HTML completo, puede leer el contenido de su correo electrónico sin problemas.


Otra razón para enviar ambos es que muchos servidores de correo marcan correos electrónicos que solo contienen contenido HTML como correo no deseado. No desea que todos sus correos electrónicos se coloquen en la carpeta de correo no deseado.


Si solo envía HTML, cualquier persona que lea el correo electrónico en un dispositivo de solo texto tendrá problemas.

Por ejemplo, sospecho que muchos dispositivos móviles de gama baja son capaces de leer correos electrónicos pero no mostrar HTML completos.

Diría que es una buena práctica enviar texto solo, o texto y HTML.

No veo por qué está atrapando una serie de excepciones solo para volver a lanzar el mismo tipo de excepción con un mensaje diferente, por cierto, el mensaje original puede ser más descriptivo.


Varios clientes de correo electrónico usarán la última Vista alternativa que se agregó a las Vistas alternativas.

Por lo tanto, si prefiere que su correo se muestre como HTML, asegúrese de agregarlo en último lugar.

He notado esto para el correo de IOS y el correo de OSX, mientras que el correo de Android parece preferir el HTML si está disponible. No estoy seguro de qué versiones tiene esto, y el comportamiento a menudo es configurable por el usuario, pero en mi experiencia estos fueron los valores predeterminados.