Hola gente!

Hace unos días tuve la necesidad de generar un PDF en C# a través de un Reporte RDLC (Reporting Services) y al mismo tiempo enviarlo por correo electrónico sin necesidad de mostrar el preview del mismo.

Primero que nada se tiene que usar la clase LocalReport para poder generarlo y luego cargar la ruta de donde se encuentre nuestro archivo .rdlc.

using (var viewer = new LocalReport())
{
   // tu código genial aquí
}

En mi caso, yo lo tengo en una carpeta que luego le indico a Visual Studio que debe copiar dicho archivo en la salida del ejecutable, marcándolo como “Copiar Siempre”.

copiarsiempre

Luego se invoca al método Render y se le pasa como parámetro el tipo de formato que queremos exportar nuestro reporte, en este caso PDF.

viewer.ReportPath = "./Reports/DemoReporte.rdlc";
var bytes = viewer.Render("PDF");

Luego creamos el contenido del correo electrónico con la clase EmailMessage y en la propiedad Attachments agregamos el arreglo de bytes con la ayuda de la clase MemoryStream, ya que justamente la clase Attachment requiere de un Stream y en el segun parámetro especificamos el nombre del archivo adjunto.

var correo = new MailMessage { From = new MailAddress(emailFrom, aliasfrom) };
 
correo.To.Add(new MailAddress(emailTo, aliasTo));
correo.Subject = "Reporte como Correo";
correo.Attachments.Add(new Attachment(new MemoryStream(bytes), "Reporte.pdf"));

Finalmente configuramos el SmtpClient para enviar el correo y listo.

using (var smtpClient = new SmtpClient(host))
{
    if (puertoSeguro)
    {
        smtpClient.EnableSsl = true;
        smtpClient.Port = 587;
    }
    smtpClient.Credentials =
        new System.Net.NetworkCredential(emailFrom, GetClave());
    Console.WriteLine("Espere unos segundos....");
    smtpClient.Send(correo);
}
 
Console.WriteLine("Correo enviado");

Así debería quedar el archivo adjunto.

reporteclientes

He creado un pequeño proyecto de Consola que lo pueden descargar de mi repositorio de GitHub.

ver-github1

Espero que les sirva.

Saludos.

 

Anuncios