我在这里问了几个问题,但仍然有问题。如果您能告诉我我在代码中做错了什么,我将不胜感激。我从ASP.Net页运行上面的代码,并得到“无法访问封闭的流”。
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("username@gmail.com", "username@gmail.com") { 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("username@gmail.com", "my_password") }; smtp.Send(mm); //the "Cannot Access a Closed Stream" error is thrown here
谢谢!!!
只是为了帮助某人寻找此问题的答案,下面提供了发送电子邮件附件中的pdf文件而无需实际创建文件的代码(感谢Ichiban和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("username@gmail.com", "username@gmail.com") { 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("username@gmail.com", "password") }; smtp.Send(mm);
你有没有尝试过:
PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream); // Build pdf code... writer.CloseStream = false; doc.Close(); // Build email memoryStream.Position = 0; mm.Attachments.Add(new Attachment(memoryStream, "test.pdf"));
如果我的记忆正确地为我服务,则可以解决先前项目中的类似问题。
参见http://forums.asp.net/t/1093198.aspx