Как преобразовать массив байтов в почтовую вставку

У меня есть массив байтов, который по существу является закодированным .docx, извлеченным из БД. Я пытаюсь преобразовать этот байт [] в его оригинальный файл и сделать его вложением в почту без необходимости его сначала хранить в виде файла на диске. Какой лучший способ сделать это?

public MailMessage ComposeMail(string mailFrom, string mailTo, string copyTo, byte[] docFile)
{
    var mail = new MailMessage();

    mail.From = new MailAddress(mailFrom);

    mail.To.Add(new MailAddress(mailTo));
    mail.Body = "mail with attachment";

    System.Net.Mail.Attachment attachment;

    //Attach the byte array as .docx file without having to store it first as a file on disk?
    attachment = new System.Net.Mail.Attachment("docFile");
    mail.Attachments.Add(attachment);

    return mail;
}

Ответ 1

Существует перегрузка конструктора Attachment, который принимает поток. Вы можете передать файл напрямую, построив MemoryStream с помощью byte[]:

MemoryStream stream = new MemoryStream(docFile);
Attachment attachment = new Attachment(stream, "document.docx");

Второй аргумент - это имя файла, из которого будет выведен тип mime. Не забудьте вызвать Dispose() на MemoryStream после того, как вы закончите с ним.