字节 [] 的 MailMessage 附件

MailMessage Attachment to byte[]

过去 3 天我一直在搜索 Google/SO 但没有成功,希望有人能帮助我或指出正确的方向。

我们有一个发送电子邮件的方法(有一堆重载)。我的任务是将电子邮件保存到数据库中。

问题

如何将附件的内容提取到 byte[] 中以便将其保存到数据库中?

我已经阅读了很多将附件保存到磁盘的示例,但我想避免先保存到磁盘然后再将其读入内存(也许这就是为什么我没有找到任何东西的原因,因为这是不可能的,对此表示怀疑) .

所以我想你问的是如何将流转换为字节然后你就不必将它保存到磁盘。您可以使用此扩展方法来做到这一点。

public static class StreamExtensions
{
    public static byte[] ReadAllBytes(this Stream instream)
    {
        if (instream is MemoryStream)
            return ((MemoryStream) instream).ToArray();

        using (var memoryStream = new MemoryStream())
        {
            instream.CopyTo(memoryStream);
            return memoryStream.ToArray();
        }
    }
}

用那个方法你可以做到这一点

System.Net.Mail.MailMessage m = new MailMessage();
foreach (var element in m.Attachments)
{
  byte[] bytes = element.ContentStream.ReadAllBytes()
   element.ContentType // you will want to save this as well so you can convert it to a file when you need to pull it back out of the database.
}