ฉันถามคำถามสองสามข้อที่นี่ แต่ยังคงมีปัญหา ฉันจะขอบคุณถ้าคุณสามารถบอกฉันได้ว่าฉันทำอะไรผิดในรหัสของฉัน ฉันเรียกใช้โค้ดด้านบนจากหน้า 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);