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

为何Memory Stream无法与FluentEmail.Core.Model.Attachment配合发送文件?

MemoryStream作为FluentEmail附件为空的原因分析

核心原因是MemoryStream的读写位置未重置:

  • 当你将文件内容复制到MemoryStream后,流的Position指针会停在流的末尾位置。
  • FluentEmail读取附件流时,会从当前Position开始读取,此时没有剩余内容可读取,最终生成的附件就是空的(仅包含流的基础标识字节)。

错误代码示例

// 错误:写入流后未重置Position
var memoryStream = new MemoryStream();
await uploadedFile.CopyToAsync(memoryStream);
var attachment = new Attachment(memoryStream, "report.pdf", "application/pdf");
await emailSender.SendAsync(email.Attach(attachment));

修正后的MemoryStream用法

只需要在创建Attachment前,将MemoryStream的Position重置为0,让读取操作从流的起始位置开始:

// 正确:重置Position到流的起始处
var memoryStream = new MemoryStream();
await uploadedFile.CopyToAsync(memoryStream);
memoryStream.Position = 0; // 关键步骤
var attachment = new Attachment(memoryStream, "report.pdf", "application/pdf");
await emailSender.SendAsync(email.Attach(attachment));

为什么OpenReadStream可以正常工作

OpenReadStream()返回的流默认Position就是0,而且它是直接指向源文件的可读流,不需要手动调整位置,FluentEmail可以直接读取到完整的文件内容,因此不会出现空附件的问题。

内容的提问来源于stack exchange,提问作者AkshatSparrow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:20:56