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”.
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.
He creado un pequeño proyecto de Consola que lo pueden descargar de mi repositorio de GitHub.
Espero que les sirva.
Saludos.