여기서 몇 가지 질문을했지만 여전히 문제가 있습니다. 내 코드에서 내가 뭘 잘못하고 있는지 말해 주시면 감사하겠습니다. 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
의 라인에 감사드립니다
—
Yisroel M. Olewski
position=0
. 나를 구했다!
정확히 내가 필요한 것이 완벽하게 작동합니다. 정말 감사합니다! 문서를 닫을 때 멈췄지만 스트림이 아닙니다. writer.CloseStream = false; 나를 위해 그것을 정리했습니다.
—
Baxter
@Semil은 받아 들여진 답변으로 오래된 질문에 현상금을 올릴 때 어떻게 든 답에서 놓친 부분을 표시해야합니다.
—
mkl jul.
writer.CloseStream = 거짓; 저를 구했습니다. iTextSharp를 사용하여 HTML을 PDF로 변환하는 방법에서 누락되었습니다. 이전에는 스트림이 닫혀서 메모리 스트림을 내 메일 함수에 전달하지 못했습니다. 감사.
—
Alec Menconi 2015 년