Éste metodo permite generar de forma asíncrona una serie de informes PDF que obtiene por una consulta entre fechas, genera un stream por cada informe y lo adjunta a un mail para el destinatario.
[code language=»c#»]
private string procesarEnvioAdjuntos(string fechaIni,string fechaFin,string email)
{
try
{
List<Informe> listaInformes = _DbInformes.GetInformes(fechaIni, fechaFin);
if(listaInformes.Count>0)
{
MailMessage mm = new MailMessage("tudestinatario@email.com", email)
{
Subject = "Informes " + fechaIni + "-" + fechaFin,
IsBodyHtml = true,
Body = "<p>Los informes se incluyen adjuntos a éste correo</p>"
};
SmtpClient smtp = new SmtpClient
{
Host = "tusmtphost@host.com",
EnableSsl = false,
Credentials = new NetworkCredential("tudestinatario@email.com", "tucontraseña")
};
List<Task> tasks = new List<Task>();
foreach (Informe item in listaInformes)
{
var t = Task.Run(() => CInformeToPDF.GetPDFStream(item.ID.ToString()));
tasks.Add(t);
}
Task.WaitAll(tasks.ToArray());
foreach (Task<MemoryStream> t in tasks)
{
MemoryStream msPDF = new MemoryStream();
msPDF = t.Result;
string filename = "tunombrefichero.pdf";
mm.Attachments.Add(new Attachment(msPDF, filename));
}
smtp.Send(mm);
Thread.Sleep(1000);
mm.Dispose();//.Dispose();
smtp.Dispose();
return "OK";
}
return "KO";
}
catch(Exception ex)
{
return ex.Message;
}
}
[/code]