我在这里问了几个问题,但仍然有问题。如果您能告诉我我在代码中做错了什么,我将不胜感激。我从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);
3
感谢您提出这个问题,这正是我想要的。
—
Hardwareguy 2010年
谢谢你的支持
—
Yisroel M. Olewski 2012年
position=0
。救了我!
正是我所需要的非常完美,非常感谢!我被困在关闭文档而不是关闭流上:writer.CloseStream = false; 为我清理了。
—
巴克斯特2014年
@Semil在悬而未决的问题上悬赏时,您确实应该以某种方式表明自己错过了答案。
—
mkl
writer.CloseStream = false; 同样也救了我,在使用iTextSharp将HTML转换为PDF的方法中丢失了它。以前,由于关闭了流,将memorystream传递给我的mail函数失败。谢谢。
—
亚历克·门科尼