从 MemoryStream 创建 MailMessage 附件

Creating MailMessage Attachment from MemoryStream

我正在使用 NPOI 从模板创建 excel 报告,将工作簿写入 MemoryStream,然后将其附加到 C# 中的 MailMessage。我的报告正在生成 OK,我可以看到它在调试中很好地拾取了工作表。但是当我将它写入 MemoryStream 并尝试附加它时,附件对象显示 Size: -1 under ContentDisposition 属性。我认为将 MemoryStream 对象 reader 位置设置为 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,因此我相信正在向其写入报告。

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

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

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

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