2009-08-25 76 views
39

¿Cómo envío un correo electrónico HTML? Uso el código en this answer para enviar correos electrónicos con SmtpClient, pero siempre son texto sin formato, por lo que el enlace en el siguiente mensaje de ejemplo no está formateado como tal.Enviar correo electrónico HTML a través de C# con SmtpClient

<p>Welcome to SiteName. To activate your account, visit this URL: <a href="http://SiteName.com/a?key=1234">http://SiteName.com/a?key=1234</a>.</p> 

¿Cómo habilito HTML en los mensajes de correo electrónico que envío?

+1

ropstah: TBH yo estaba confundido y escribió en uno de sus comentarios que no hay IsBodyHtml en SmtpClient. Josiah es quien me mostró que lo haga con MailMessage. –

Respuesta

8

Aplicar la codificación correcta de Mailbody.

mail.IsBodyHtml = true; 
18

Creo que fue algo así como:

mailObject.IsBodyHtml = true; 
+0

ropstah: TBH estaba confundido y escribí en uno de los dos comentarios que no hay IsBodyHtml en SmtpClient. Josiah es quien me mostró que lo haga con MailMessage. –

81

Esto es lo que hago:

MailMessage mail = new MailMessage(from, to, subject, message); 
mail.IsBodyHtml = true; 
SmtpClient client = new SmtpClient("localhost"); 
client.Send(mail); 

Nota que puse el html mensaje de correo a cierto: mail.IsBodyHtml = true;

+5

Merece la pena señalar que tanto 'MailMessage' como' SmtpClient' implementan 'IDisposable', y deben eliminarse como corresponda. – djs

1

Tengo una idea, puede agregar una casilla de verificación a su proyecto para el envío de correo electrónico como HTML como una opción para el usuario, y añadir el código que le permita:

  MailMessage mail = new MailMessage(from, to, subject, message); 

     if(checkBox1.CheckState == CheckState.Checked) 
      { 
       mail.IsBodyHtml = true; 
      } 

     SmtpClient client = new SmtpClient("localhost"); 

     client.Send(mail); 
13

IsBodyHtml = true es, sin duda, la parte más importante.

Pero si desea proporcionar un correo electrónico tanto con un/una parte de texto plano y una parte text/html compuesta como suplentes, también es posible utilizar la clase AlternateView:

MailMessage msg = new MailMessage(); 
AlternateView plainView = AlternateView 
    .CreateAlternateViewFromString("Some plaintext", Encoding.UTF8, "text/plain"); 
// We have something to show in real old mail clients. 
msg.AlternateViews.Add(plainView); 
string htmlText = "The <b>fancy</b> part."; 
AlternateView htmlView = 
    AlternateView.CreateAlternateViewFromString(htmlText, Encoding.UTF8, "text/html"); 
msg.AlternateViews.Add(htmlView); // And a html attachment to make sure. 
msg.Body = htmlText; // But the basis is the html body 
msg.IsBodyHtml = true; // But the basis is the html body 
+0

¿Es realmente necesario el 'AlternateView' para' htmlView'? Porque ya configuraste el cuerpo para que sea 'htmlText'. ¿No es redundante volver a configurarlo como vista alternativa? –

+1

No solo es necesario, sino también importante que se agregue después de la vista alternativa plana. ver http://stackoverflow.com/questions/5188605/gmail-displays-plain-text-email-instead-html. Pero especificar Body e IsBodyHtml no es necesario si ha agregado html alternate view. – FunkyOne

Cuestiones relacionadas