2015-11-02 12 views
0

Я использую NPOI для создания отчета Excel из шаблона, напишу книгу в MemoryStream и затем привяжу ее к MailMessage на C#. Мой отчет сгенерирован ОК, я вижу, что он отлично подбирает листы в отладке. Но когда я пишу его в MemoryStream и пытаюсь прикрепить его, объект Attachment говорит Size: -1 в свойстве ContentDisposition. Я думал, что установка позиции считывателя объектов MemoryStream на 0 решит это, но не повезло.Создание приложения MailMessage из MemoryStream

MailMessage mm = new MailMessage("[email protected]", "[email protected]"); 
     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, поэтому я считаю, что отчет записывается на него.

ответ

3

Выполнено с помощью этого фрагмента кода в модульном тестовом проекте, и я не смог получить свойство ContentDisposition для изменения с -1.

Получалось, что память MemoryStream заполнена данными, а переключение между memStream.Position = 0 на memStream.Seek(0, SeekOrigin.Begin);, похоже, не помогло.

Я заметил, что memStream.Close очистил свойство Attachment.ContentStream.

Попробуйте отправить сообщение перед закрытием потока памяти, в котором хранятся данные вложения.

+0

Я не мог заставить его измениться с -1, но отправка сообщения перед закрытием потока заставляет его работать нормально! благодаря – wizloc