2015-02-11 82 views
5

我能夠在郵件中發送附件,但附件內容爲空,大小顯示爲0字節。來自內存流的電子郵件附件在C#中爲空白

在互聯網上進行了一些搜索後,發現我們需要將內存流位置重置爲0,以便從頭開始。

我試過,但它似乎不工作。你能幫忙嗎?

請找我下面的代碼片段:

注:我能夠保存工作簿和數據存在於保存工作簿。

 MemoryStream memoryStream = new MemoryStream(); 

     StreamWriter writer = new StreamWriter(memoryStream); 
     writer.Write(xlWorkbook); 
     writer.Flush(); 
     memoryStream.Position = 0; 
     MailMessage mail = new MailMessage(); 
     SmtpClient SmtpServer = new SmtpClient("smtpclient"); 
     mail.From = new MailAddress("[email protected]"); 
     mail.To.Add("[email protected]"); 
     mail.Subject = "Entry"; 
     mail.Body = "Hello, PFA "; 
     System.Net.Mail.Attachment attachment; 

     attachment = new System.Net.Mail.Attachment(memoryStream,"xls"); 
     attachment.ContentDisposition.FileName = "Input" + DateTime.Now.ToString("yyyyMMdd_hhss") + ".xls"; 
     mail.Attachments.Add(attachment); 
     SmtpServer.Port = 465; 
     SmtpServer.UseDefaultCredentials = false; 
     SmtpServer.Credentials = new System.Net.NetworkCredential("Username", "password"); 
     SmtpServer.EnableSsl = true; 
     SmtpServer.Send(mail); 
     writer.Dispose(); 
+0

您是否知道XLS文件正在被正確讀取?沖水後的位置是什麼? – Virmundi 2015-02-11 13:34:52

+0

沖洗後的位置值是44 – 2015-02-11 13:43:48

+0

最後一個診斷問題,如果您尋求0而不是位置= 0會發生什麼?像memStream.Seek(0,SeekOrigin.Begin); – Virmundi 2015-02-11 13:52:40

回答

4

我覺得附件令人困惑的郵件系統。微軟的建議是將內容類型指定爲octet。以下是初始化附件的替代品。你的代碼重置看起來很好。

string filename = "Input" + DateTime.Now.ToString("yyyyMMdd_hhss") + ".xls"; 
attachment = new System.Net.Mail.Attachment(memoryStream, filename, MediaTypeNames.Application.Octet); 
+0

看到這個:https://stackoverflow.com/questions/3710677/email-attachment-from-the-memorystream-comes-empty?rq=1 – 2017-07-07 10:48:41