ここでいくつか質問しましたが、まだ問題が解決していません。私のコードで私が間違っていることを教えていただければ幸いです。上記のコードを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 2012年
position=0
。助かりました!
まさに私が必要としているものは完璧に機能します。ストリームではなく、ドキュメントを閉じるのに行き詰まりました:writer.CloseStream = false; 私のためにそれを片付けました。
—
バクスター2014年
@Semil受け入れられた回答のある古い質問に賞金を出すとき、あなたは本当にどういうわけか答えであなたが逃したものを示すべきです。
—
mkl 2015
writer.CloseStream = false; 私も救いました、iTextSharpを使用してHTMLをPDFに変換するメソッドにはそれがありませんでした。以前は、メモリストリームをメール関数に渡すことが、ストリームが閉じられていたために失敗しました。ありがとう。
—
Alec Menconi、2015年