You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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;
}

用户的疑问:

  1. 该Stream方式是否会在本地生成文件,还是仅添加附件?
  2. 若生成文件,未指定路径时文件存于何处?
  3. 如何不生成本地文件直接将字符串作为邮件附件添加?

解答

  • 是否生成本地文件?
    不会生成任何本地文件。你用的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:04:58