c# - 为电子邮件附件使用多个内存流

标签 c# .net smtp

我正在尝试使用多个内存中流构建一个 EmailMessage。但是,当我发送电子邮件时,出现以下错误:

"One of the streams has already been used and can't be reset to the origin"

据我所知,我认为问题可能是当我尝试执行以下操作时消息正在丢失内存流的上下文:

    foreach (var att in attachments)
    {
        doc = fetchDocumentByteArray();
        using (MemoryStream ms = new MemoryStream(doc))
        {
              mailToSend.AddAttachment(new Attachment(ms, att.Filename));
        }
    }
    mailToSend.Send();

我也试过设置 ms.Position = 0在 AddAttachment() 之前,但这不起作用。

在四处寻找像我这样的场景后,我发现了使用 List<MemoryStream> 的建议。 - 但我不确定我将如何实现它,或者它是否是正确的方法?

最佳答案

当您使用“using”键时,会在内部调用 Dispose 方法。它将使 MemoryStreams 被释放。

删除内部循环中的 using 并创建一个 try/finally 子句以在发送电子邮件后处理内存流。

关于c# - 为电子邮件附件使用多个内存流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25081225/

相关文章:

c# - C# 中的 SQL 依赖

c# - 努力理解 Equals()

c# - .GetHashCode() 是否应该为内存中具有不同引用的两个对象返回相同的值?

c# - 从 .net 程序读取 linux 中的文件?

c# - WCF 服务 : Publicly available services useful for testing

c# - 按不同日期排序时选择要列出的值()

c# - 拒绝 BigQuery 中的结果

SMTP Mandrill 端口 587 连接超时

c# - 发送电子邮件时如何修复 'No connection could be made because the target machine actively refused it' 错误

delphi - Indy SMTPServer 在 OnConnect 事件中发送错误消息