Mandando mails con formato HTML desde ASP.Net (reportes por mail I)

Recientemente me salio la necesidad de enviar mails con diversos tipos de datos desde una aplicación en ASP.Net, y me encontre con varios problemas interesantes para resolver, los cuales tratare en varias partes.

Primero esta el problema de mandar un correo. Por fortuna el .Net framework nos da herramientas para lograr esto de manera muy sencilla.

 MailMessage mail = new MailMessage();
mail.From = new MailAddress(Properties.Settings.Default.MailAddress);
mail.To.Add(To);
mail.CC.Add(CC);
mail.Bcc.Add(CCO);
mail.Subject = Subject;
mail.Body = Body;
SmtpClient SMTPsender = new SmtpClient(Properties.Settings.Default.MailServerAddress);
SMTPsender.UseDefaultCredentials = false;
SMTPsender.Credentials =
new System.Net.NetworkCredential(
Properties.Settings.Default.Usuario,
Properties.Settings.Default.Password,
Properties.Settings.Default.Dominio);
SMTPsender.Send(mail);

Esta solución tan sencilla nos deja enviar correo en formato de solo texto. Pero ¿que pasa si queremos darle mas formato?. Tenemos que recurrir al HTML. Para ello, solo tenemos que hacer dos cosas diferentes:

  1. Especificar que el cuerpo de nuestro correo tiene formato HTML
  2. mail.IsBodyHtml = true;

  3. Formatear la cadena que enviamos con las etiquetas correspondientes.

Pero, ¿que seria de nuestro correo con bonito formato Html si no tiene imagenes?

Para lograr imagenes dentro de un correo simplemente tenemos que usar el MIME. En nuestro codigo HTML vamos a usar la siguiente sintaxis:

<img alt=”Imageb” src=”cid:idDeLaImagen”/>

Asegurandonos que idDeLaImagen sea unica para este correo.

Posteriormente, vamos a agregar esa imagen a nuestro correo haciendo uso de los AlternateViews

//Agregamos como recurso ligado, el logo del proyecto.
LinkedResource lr = new LinkedResource([la ruta de nuestra imagen]);
lr.ContentId = “idDeLaImagen”;
//Incluimos la vista en HTML como vista del correo a enviar.
AlternateView av = AlternateView.CreateAlternateViewFromString
(body, null, System.Net.Mime.MediaTypeNames.Text.Html);
av.LinkedResources.Add(lr);
mail.AlternateViews.Add(av);

Esto nos permitira que los datos que adjuntamos se muestren como parte del correo y no como adjuntos.

Un par de aclaraciones pertinentes:

  1.  Las lineas que dicen Properties.Settings.Default… implican que esos datos los estoy obteniendo del archivo de configuración. Una forma muy util de guardar caracteristicas de nuestro sistema.
  2. Resulta que descubri que es legal usar como dirección para el SmtpClient la dirección del servidor Exchange de mi empresa. Desconozco la razon, pues se que Exchange no usa precisamente el mismo protocolo SMTP. Mi teoria es que los servidores Exchange (no se si por default) tienen ademas abierto el servicio SMTP. Por eso hago uso de las NetworkCredential, con cualquier usuario valido del dominio se puede enviar correos. Muy útil en ambientes empresariales con Exchange y ActiveDirectory.

Las siguientes partes se trataran de como enviar datos directo de una pagina web por correo, ya sea como HTML o como un archivo adjunto de Excel, y ademas, de como lograr que los metodos propuestos funcionen :-P ¬¬

2 Responses to “Mandando mails con formato HTML desde ASP.Net (reportes por mail I)”

  1. grl Says:

    Buena explicacion amigo de verda me sirvio

  2. Jhon Says:

    Buena la explicacion, revisando y probando

Leave a Reply