none
como dar formato a un correo c# windowsform RRS feed

  • Pregunta

  • tengo el siguiente metodo

    public void enviar_correo(string host, int puerto, string remitente, string contraseña, string nombre, string destinatarios, string cc, string asunto,  string cuerpo)
            {
                try
                {
                    SmtpClient cliente = new SmtpClient(host, puerto);
                    MailMessage correo = new MailMessage();
    
                    correo.From = new MailAddress(remitente, nombre);
                    correo.Body = cuerpo;
                    correo.Subject = asunto;
                    if (destinatarios == "") { }
                    else
                    {
                        string[] cadena = destinatarios.Split(delimitador_cc);
                        foreach (string word in cadena) correo.To.Add(word.Trim());
                    }
                    if (cc == "") { }
                    else
                    {
                        string[] cadena1 = cc.Split(delimitador_cc);
                        foreach (string word in cadena1) correo.CC.Add(word.Trim());
                    }
                    cliente.Credentials = new NetworkCredential(remitente, contraseña);
                    cliente.EnableSsl = true;
                    cliente.Send(correo);
    
                    MessageBox.Show("El correo se ha enviado correctamente");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
               
            }

    que se encarga de enviar correos pero estos se envian en texto plano.

    como puedo modificarlo para poder cambiar el tipo de letra, color y otras propiedades.

    • Cambiado Enrique M. Montejo miércoles, 13 de diciembre de 2017 15:57 Desarrollo con C#.
    miércoles, 13 de diciembre de 2017 4:58

Respuestas

  • Para poder cambiar cosas como el tipo de letra y el color, hay que enviar el correo en HTML en lugar de texto plano. Para ello, se pone correo.IsBodyHtml=true, y luego en el texto del Body le metes un string formateado como si fuera para una página web, por ejemplo, <b>...</b> para negrita, <font...>...</font> para cambiar de fuente, etc.

    Para hacerlo realmente bien hecho, deberías incluir en el mensaje dos vistas, una con el html y otra en texto plano para los destinatarios que no puedan verlo en html. Eso se hace con la propiedad AlternateViews.

    https://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.isbodyhtml%28v=vs.110%29.aspx

    https://stackoverflow.com/questions/2555813/what-does-mailmessage-isbodyhtml-do

    miércoles, 13 de diciembre de 2017 7:40
    Moderador
  • El problema es que has metido unas comillas dentro de la cadena que va entre comillas:

    string rtbmensaje = " ... "https...." ....";

    Tiene dos soluciones:

    1) Escapar las comillas anteponiéndoles una contrabarra:

    string rtbmensaje = " ... \"https....\" ....";

     2) Cambiar las comillas internas por comillas simples, que al HTML le dan lo mismo:

    string rtbmensaje = " ... 'https....' ....";

    Nótese que esto no es culpa del mensaje de correo ni del hecho de que lo envíes como HTML, te pasaría lo mismo con cualquier otro string que hubieras usado en cualquier otro sitio y que tuviera que contener unas comillas.

    jueves, 14 de diciembre de 2017 7:48
    Moderador

Todas las respuestas

  • Para poder cambiar cosas como el tipo de letra y el color, hay que enviar el correo en HTML en lugar de texto plano. Para ello, se pone correo.IsBodyHtml=true, y luego en el texto del Body le metes un string formateado como si fuera para una página web, por ejemplo, <b>...</b> para negrita, <font...>...</font> para cambiar de fuente, etc.

    Para hacerlo realmente bien hecho, deberías incluir en el mensaje dos vistas, una con el html y otra en texto plano para los destinatarios que no puedan verlo en html. Eso se hace con la propiedad AlternateViews.

    https://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.isbodyhtml%28v=vs.110%29.aspx

    https://stackoverflow.com/questions/2555813/what-does-mailmessage-isbodyhtml-do

    miércoles, 13 de diciembre de 2017 7:40
    Moderador
  • estoy intentando insertar una imagen pero me da error al insertar la etiqueta de imagen.

    string rtbmensaje = 
    "<html><head></head><body>
    <img src="https://i0.wp.com/www.excsaltda.cl/wp-content/uploads/2015/10/logo.png?resize=241%2C126"><h1>notificacion de extintor vencido</h1>
    <ul><li>estimado cliente informamos que usted pose uno o mas extintores que ya han vencido</li>
    <li>Acerquese a nuestra sucursal para la recarga o mantención de su extintor</li>
    <li>Saluda atentamente a usted el equipo de excsa.</li></ul>
    </body>
    </html>";

    me da el siguiente error:

    se esperaba un ;

    miércoles, 13 de diciembre de 2017 22:35
  • El problema es que has metido unas comillas dentro de la cadena que va entre comillas:

    string rtbmensaje = " ... "https...." ....";

    Tiene dos soluciones:

    1) Escapar las comillas anteponiéndoles una contrabarra:

    string rtbmensaje = " ... \"https....\" ....";

     2) Cambiar las comillas internas por comillas simples, que al HTML le dan lo mismo:

    string rtbmensaje = " ... 'https....' ....";

    Nótese que esto no es culpa del mensaje de correo ni del hecho de que lo envíes como HTML, te pasaría lo mismo con cualquier otro string que hubieras usado en cualquier otro sitio y que tuviera que contener unas comillas.

    jueves, 14 de diciembre de 2017 7:48
    Moderador
  • para cambiar de color el texto solo:

    "<html><body><P>Hola. <Font Color='#4682B4'><B> "

     Buenos dias "</B></Font></P>"

    en el correo aparece como Hola(en negrito) y Buenos dias en Azul.

    Saludos.

    viernes, 15 de diciembre de 2017 14:17