从MemoryStream创建MailMessage附件

时间:2015-11-02 16:55:14

标签: c# memorystream npoi mailmessage

我正在使用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对象的长度为30,720,所以我相信报告正在写入。

1 个答案:

答案 0 :(得分:3)

在单元测试项目中使用此代码片段,我无法将ContentDisposition属性从-1更改。

然而,MemoryStream是否填充了数据,并且在memStream.Position = 0memStream.Seek(0, SeekOrigin.Begin);之间切换似乎没有帮助。

我注意到memStream.Close正在清除Attachment.ContentStream属性。

尝试在关闭存储附件数据的内存流之前发送消息。