iTextSharp – Invio di pdf in memoria in un allegato di posta elettronica

Ho fatto un paio di domande qui, ma sto ancora avendo problemi. Sarei grato se potessi dirmi cosa sto facendo male nel mio codice. Eseguo il codice sopra da una pagina ASP.Net e ottengo “Imansible accedere a un stream chiuso”.

var doc = new Document(); MemoryStream memoryStream = new MemoryStream(); PdfWriter.GetInstance(doc, memoryStream); doc.Open(); doc.Add(new Paragraph("First Paragraph")); doc.Add(new Paragraph("Second Paragraph")); doc.Close(); //if I remove this line the email attachment is sent but with 0 bytes MailMessage mm = new MailMessage("[email protected]", "[email protected]") { Subject = "subject", IsBodyHtml = true, Body = "body" }; mm.Attachments.Add(new Attachment(memoryStream, "test.pdf")); SmtpClient smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, Credentials = new NetworkCredential("[email protected]", "my_password") }; smtp.Send(mm); //the "Cannot Access a Closed Stream" error is thrown here 

Grazie!!!

MODIFICARE:

Solo per aiutare qualcuno a cercare la risposta a questa domanda, il codice per inviare un file pdf allegato a una e-mail senza dover creare fisicamente il file è sotto (grazie a Ichiban e Brianng):

 var doc = new Document(); MemoryStream memoryStream = new MemoryStream(); PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream); doc.Open(); doc.Add(new Paragraph("First Paragraph")); doc.Add(new Paragraph("Second Paragraph")); writer.CloseStream = false; doc.Close(); memoryStream.Position = 0; MailMessage mm = new MailMessage("[email protected]", "[email protected]") { Subject = "subject", IsBodyHtml = true, Body = "body" }; mm.Attachments.Add(new Attachment(memoryStream, "filename.pdf")); SmtpClient smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, Credentials = new NetworkCredential("[email protected]", "password") }; smtp.Send(mm);