为何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
相关产品推荐
相关产品推荐

