Dot-Net

作為 System.Net.Mail 的附件的流是 0 字節

  • August 22, 2009

我有一個項目,我正在使用 PDF 生成器向使用者發送文件。我們想讓使用者選擇將此文件附加到電子郵件中,但我們在同時使用 Stream 對象和附件邏輯時遇到了問題。

我們從 ABCpdf 開始,它有兩種保存方法:它可以保存到 Stream,或者如果你給它一個字元串,它會嘗試保存到磁碟上的文件。我們都做了沒有問題。

Stream stream = new MemoryStream();
myPdf.Save(stream);

此時一切都很酷 -stream有幾千字節的數據,如果你 .Save() 到一個文件,你會得到一個具有相同字節數的實際文件。

所以我們此時附加到一封電子郵件(在初始化郵件對象、設置 To: 和 From: 等之後):

mail.Attachments.Add(new Attachment(stream, "myPdf.pdf"));
mail.Send();

…這讓我們收到一封 0 字節的電子郵件,但文件名正確。

我在網上找到的所有範例都使用 StreamReader 或 StreamWriter 或 Flush() 或其他東西。它似乎總是比簡單地傳遞 Stream 更複雜,但可能只有一兩行更複雜。這些範例都不是以 Stream 開頭的 - 他們總是試圖將數組轉換為 Stream 以向您展示這是多麼容易,或者從磁碟中獲取文件(我們不能這樣做,這就是我們興奮的原因使用流)。

無論如何,如果有人能解釋我做錯了什麼或我應該做什麼,我將不勝感激。謝謝。

一個猜測……在發送 nit 之前將數據流返回到開頭

// Set the position to the beginning of the stream.
stream.Seek(0, SeekOrigin.Begin);
mail.Attachments.Add(new Attachment(stream, "myPdf.pdf"));
mail.Send();

引用自:https://stackoverflow.com/questions/1317236