我使用NPOI从模板创建excel报告,将工作簿写入MemoryStream,然后将其附加到C#中的MailMessage。我的报告正在生成中,我可以看到它在调试中处理得很好。但是,当我将它写入MemoryStream并尝试附加它时,Attachment对象在ContentDisposition属性下显示Size:-1。我认为将MemoryStream对象读取器的位置设置为0可以解决这个问题,但运气不好。
MailMessage mm = new MailMessage("DoNotReply@testmail.com", "myself@testmail.com");
mm.Subject = "Reports for October, 2015";
mm.Body = "Attached below is the report.";
using (var memStream = new MemoryStream())
{
HSSFWorkbook closedReport = getClosedReport();
closedReport.Write(memStream);
memStream.Position = 0;
Attachment att1 = new Attachment(memStream, "ClosedReport.xls");
att1.ContentType = new System.Net.Mime.ContentType("application/vnd.ms-excel");
mm.Attachments.Add(att1);
memStream.Close();
}
我的MemoryStream对象的长度为30720,所以我相信报告正在写入其中。
在单元测试项目中反复使用此代码片段,我无法将ContentDisposition属性从-1更改。
然而,确实用数据填充了MemoryStream,在memStream.Position = 0
到memStream.Seek(0, SeekOrigin.Begin);
之间切换似乎没有帮助。
我确实注意到memStream.Close正在清除Attachment.ContentStream属性。
请在关闭存储附件数据的内存流之前尝试发送消息