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

标签 .net asp.net email streaming attachment

我有一个项目,正在使用PDF生成器将文件发送给用户。我们希望为用户提供将此文件附加到电子邮件的选项,并且我们无法同时使用Stream对象和Attachment逻辑。

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

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


此时一切都很酷-stream拥有几千字节的数据,如果将.Save()保存到文件中,则将获得具有相同字节数的实际文件。

因此,我们此时附加到电子邮件(初始化邮件对象,设置“收件人:”和“发件人:”等之后):

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


...这使我们尽可能接收一封0字节但文件名正确的电子邮件。

我在网上找到的所有示例都使用StreamReader或StreamWriter或Flush()之类的东西。它总是看起来比简单地传递一个Stream更复杂,但是也许只复杂了一两行。这些示例都不是从Stream开头的,它们总是试图将数组变成Stream来向您展示这是多么容易,或者从磁盘中抓取文件(这是我们无法做到的,这就是为什么我们很兴奋的原因。使用流)。

无论如何,如果有人能解释我在做什么或应该做什么,我将非常感激。谢谢。

最佳答案

猜猜...在发送nit之前,返回dat流到开头

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

关于.net - 作为System.Net.Mail附件的流为0字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1317236/

相关文章:

c# - 解析 .NET 中类似内容的简单正则表达式问题?

c# - 当右侧操作数是泛型时, "as"运算符如何翻译?

c# - 启动 Bing map 时应使用哪个 API

html - 具有多个抄送地址的 Mailto

android - 如何在android开发中使用Gmail API发送邮件

c# - 如何仅在同一用户的登录 session 中使用 WCF NetNamedPipesBinding 进行进程间通信?

c# - 序列包含多个元素

c# - IIS 中是否有 ASP.NET 网站管理工具?

c# - 错误 : Could not load file or assembly 'System.Net.Http.Primitives, Version=1.5.0.0...'

php - 如何为用户显示电子邮件地址但对机器人隐藏?有没有使用 PHP、Javascript 或 Jquery 的简单方法?