2017-02-16 9 views
1

Я пытаюсь создать и отправить динамический файл csv в виде вложения по почте, но он не работает. Я могу отправить почту с прикреплением, но файл будет пустым. Ниже приведен мой код:Невозможно создать и отправить файл динамической CSV в виде вложения по почте

var notProcessedRecords = FileFTPData.Where(x => x.LastName.StartsWith("9999")).ToList(); 

     string loggedInUserName = "Administrator"; 

     try 
     { 
     MemoryStream stream = new MemoryStream(); 
     TextWriter writer = new StreamWriter(stream, Encoding.Default); 
     StringBuilder sb = new StringBuilder(); 
     sb.AppendFormat(string.Format("{0}, {1}, {2}, {3}, {4}, {5} ", "FIRSTNAME", "LASTNAME", "USERID", "COMPANYNAME", "EMAIL", "PHONE")); 

     foreach (var item in notProcessedRecords) 
     { 
      sb.AppendLine(); 
      sb.AppendFormat(string.Format("{0}, {1}, {2}, {3}, {4}, {5} ", item.FirstName, item.LastName, item.UserId, item.CompanyName, item.Email, item.Phone)); 
     } 
     writer.WriteLine(sb); 

     MailMessage mail = new MailMessage(); 
     SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com"); 
     mail.From = new MailAddress("******@gmail.com"); 
     mail.To.Add("*******@yahoo.com"); 
     mail.Subject = "FTP file processing status"; 
     mail.Body = "<div>Hello " + loggedInUserName + ", </br></br> Following item are restricted from processing, due to some errors. Please check Process description for the same. </br></br> From, </br>Streben Support </div>"; 
     mail.IsBodyHtml = true; 

     Attachment attachment = new Attachment(stream, new ContentType("text/csv")); 
     attachment.Name = "test.csv"; 
     mail.Attachments.Add(attachment); 

     SmtpServer.Port = 587; 
     SmtpServer.Credentials = new System.Net.NetworkCredential("******@gmail.com", "******"); 
     SmtpServer.EnableSsl = true; 

     SmtpServer.Send(mail); 

     } 
     catch(Exception ex) 
     { 
     } 

Может ли кто-нибудь помочь мне в исправлении проблемы?

ответ

1

Как только вы только что закончили запись в поток, свойство Position будет установлено в конец потока. Кроме того, все еще могут быть некоторые буферизированные данные в записи, которые не были сброшены в поток. Из-за этого, когда вложение создается из потока, оно будет пустым. Чтобы исправить это, выполните следующие действия:

// Done writing here // 

writer.Flush(); 
stream.Position = 0; 

// Create attachment here // 
+0

Я установил stream.position = 0, файл по-прежнему пуст в приложении. – Sachin

+0

Вы установили флажок перед настройкой позиции? –

+0

Нет. Я сделал флеш после этой строки: Attachment attachment = new Attachment (stream, new ContentType ("text/csv")); attachment.Name = "test.csv"; mail.Attachments.Add (приложение); writer.Flush(); – Sachin