使用Stream附加MailMessage会生成文件吗?如何无文件添加字符串附件?
关于邮件附件Stream方式的疑问解答
问题描述
用户编写了如下代码用于添加邮件附件:
主方法代码
var newMessage = new MailMessage(); newMessage.Attachments.Add(new Attachment(ToStream("testAttachment"), MediaTypeNames.Text.Plain));
依赖的ToStream方法
private Stream ToStream(string text) { var stream = new MemoryStream(); var writer = new StreamWriter(stream); writer.Write(text); writer.Flush(); stream.Position = 0; return stream; }
用户的疑问:
- 该Stream方式是否会在本地生成文件,还是仅添加附件?
- 若生成文件,未指定路径时文件存于何处?
- 如何不生成本地文件直接将字符串作为邮件附件添加?
解答
是否生成本地文件?
不会生成任何本地文件。你用的MemoryStream是完全在内存中操作的流,所有数据都存储在应用程序的内存空间里,不会写入磁盘。Attachment接收Stream参数时,会直接读取流中的数据构建附件内容,不会将流数据持久化到本地文件。若生成文件的存储路径?
基于上面的结论,这个问题不成立——你的代码根本不会创建本地文件,所以不存在存储路径的问题。如何直接将字符串作为附件添加?
你当前的写法其实已经实现了“不生成本地文件直接用字符串做附件”的需求,因为MemoryStream完全在内存中处理。不过可以优化写法,让代码更简洁:var newMessage = new MailMessage(); // 直接在Attachment构造时处理字符串,省去单独的ToStream方法 using var stream = new MemoryStream(Encoding.UTF8.GetBytes("testAttachment")); newMessage.Attachments.Add(new Attachment(stream, "附件文件名.txt", MediaTypeNames.Text.Plain));这里额外指定了附件文件名(第二个参数),收件人看到的附件会有明确名称,比只传媒体类型更友好。另外用
using语句管理MemoryStream的生命周期,确保资源能及时释放。
内容的提问来源于stack exchange,提问作者user98
相关产品推荐
相关产品推荐

