与.Net邮件附件一起使用时,请处理MemoryStream

本文关键字:处理 MemoryStream Net 一起 | 更新日期: 2023-09-27 18:21:09

我正在使用MemoryStream从存储在DB中的二进制文件中添加附件。我的问题是我想正确地处理MemoryStream。使用"using"语句很容易做到这一点,但当我有多个附件时,我不知道如何正确处理多个MemoryStream。

有没有一种好的方法可以迭代和附加文件,但同时正确地处理我用来附加的MemoryStream?当我在使用smtp之前尝试刷新/关闭时。通过一个错误发送它,声明流已经关闭。

如有任何建议,我们将不胜感激。

与.Net邮件附件一起使用时,请处理MemoryStream

我知道这是一篇老文章,但事实证明,处理MailMessage或将其封装在using语句中就足够了,因为当处理MailMessage时,所有AttachmentCollection也被处理,当处理Attachment时,Stream也被处理。查看ReferenceSource以获取完整的代码。

using(MailMessage mail = new MailMessage())
{
   // Add attachments without worring about disposing them
}

您可以迭代MemoryStream并处理它们。将处置代码放入finally块等于using语句。

var list = new List<MemoryStream>(){new MemoryStream(), new MemoryStream()};
try
{
    //....
}
finally
{
    foreach (var x in list)
    {
        x.Dispose();
    }
}

using语句确保即使在对象上调用方法时发生异常。你可以通过将对象放入try块中并然后在finally块中调用Dispose;事实上using语句由编译器翻译。

来自MSDN

using (var ms1 = new MemoryStream())
  using (var ms2 = new MemoryStream())
  {
    ...
  }