Enviar correo electrónico HTML a través de C# con SmtpClient

3 minutos de lectura

¿Cómo envío un correo electrónico HTML? Uso el código en esta respuesta para enviar correos electrónicos con SmtpClientpero siempre son texto sin formato, por lo que el enlace en el mensaje de ejemplo a continuación no tiene el formato como tal.

<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?

  • ropstah: TBH estaba confundido y escribí en uno de sus comentarios que no hay IsBodyHtml en SmtpClient. Josiah es quien me enseñó a hacerlo con MailMessage.

    usuario34537

    26 de agosto de 2009 a las 4:02

avatar de usuario
josiah peters

Esto es lo que hago:

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

Tenga en cuenta que configuré el mensaje de correo html en verdadero: mail.IsBodyHtml = true;

  • Vale la pena señalar que ambos MailMessage y SmtpClient implementar IDisposabley deben eliminarse en consecuencia.

    – djs

    23 de febrero de 2017 a las 19:54

  • Uso el formulario de Windows C# para enviar correos electrónicos de esta manera. ¿Cómo incrustar una imagen en el correo electrónico? `string body = “Hola…

    Título de la prueba

    cuerpo de la prueba

    Imagen“;’ Acabo de agregar mi imagen a la carpeta bin/debug. Pero no está funcionando.

    – Jay Naz

    8 de diciembre de 2018 a las 4:34

Creo que fue algo como:

mailObject.IsBodyHtml = true;

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

Pero si desea proporcionar un correo electrónico con una parte de texto/sin formato y una parte de texto/html compuestas como alternativas, también es posible usar el AlternateView clase:

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

  • Es el AlternateView por htmlView ¿realmente necesario? Porque ya pusiste el cuerpo para ser htmlText. ¿No es redundante configurarlo nuevamente como vista alternativa?

    –Rosdi Kasim

    22/01/2016 a las 10:00

  • No solo es necesario, sino también importante que se agregue después de la vista alternativa simple. consulte stackoverflow.com/questions/5188605/…. Pero no es necesario especificar Body e IsBodyHtml si ha agregado una vista alternativa html.

    – Funky One

    22 de septiembre de 2016 a las 12:44


Aplique la codificación correcta del Mailbody.

mail.IsBodyHtml = true;

avatar de usuario
nassimlouchani

tengo una idea, puede agregar una casilla de verificación a su proyecto para enviar un correo electrónico como html como una opción para el usuario, y agregar este código para habilitarlo:

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

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

         SmtpClient client = new SmtpClient("localhost");

         client.Send(mail);

Si estás usando Kit de correo,Podemos usar TextBody, HtmlBody y Ambos para el cuerpo del mensaje. Solo escribe este código. Te ayudará

            MimeMessage mailMessage = new MimeMessage();
            mailMessage.From.Add(new MailboxAddress(senderName, [email protected]));
            mailMessage.Sender = new MailboxAddress(senderName, [email protected]);
            mailMessage.To.Add(new MailboxAddress(emailid, emailid));
            mailMessage.Subject = subject;
            mailMessage.ReplyTo.Add(new MailboxAddress(replyToAddress));
            mailMessage.Subject = subject;
            var builder = new BodyBuilder();
            builder.HtmlBody = "Hello There";
            mailMessage.Body = builder.ToMessageBody();            
            try
            {
                using (var smtpClient = new SmtpClient())
                {
                    smtpClient.Connect("HostName", "Port", MailKit.Security.SecureSocketOptions.None);
                    smtpClient.Authenticate("[email protected]", "password");

                    smtpClient.Send(mailMessage);
                    Console.WriteLine("Success");
                }
            }
            catch (SmtpCommandException ex)
            {
                Console.WriteLine(ex.ToString());              
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());                
            }

¿Ha sido útil esta solución?