流作为System.Net.Mail的附件是0字节

时间:2009-08-22 22:42:56

标签: .net asp.net email streaming attachment

我有一个项目,我正在使用PDF生成器向用户发送文件。我们希望为用户提供将此文件附加到电子邮件的选项,而我们在使用Stream对象和附件逻辑时遇到问题。

我们从ABCpdf开始,它有两种保存方法:它可以保存到Stream,或者如果你给它一个字符串,它会尝试保存到磁盘上的文件。我们两个都没问题。

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

此时一切都很酷 - stream有几千字节的数据,如果你。(文件)保存(),你会得到一个具有相同字节数的实际文件。

所以我们此时附上一封电子邮件(初始化邮件对象后,设置为:和发件人:等):

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

...这使得我们接收到一个0字节的电子邮件,但正确的文件名。

我在网上找到的所有示例都使用StreamReader或StreamWriter或Flush()等。它总是看起来比简单传递Stream更复杂,但可能只有一两行更复杂。这些示例都不是以Stream开头的 - 他们总是试图将数组转换为Stream来向您展示它是多么容易,或者从磁盘中获取文件(我们无法做到这一点,这就是为什么我们很兴奋使用Stream)。

无论如何,如果有人能解释我做错了什么或我应该做什么,我真的很感激。感谢。

2 个答案:

答案 0 :(得分:37)

猜测...在发送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();

答案 1 :(得分:-1)

您是否尝试过保存文件然后附加文件,而不是尝试附加流?

加入

这里的正常过程是

  1. 使用流在磁盘上创建文件

  2. 将文件附加到电子邮件

  3. 完成后删除文件。