2010-07-07 4 views
10

У меня есть массив байтов, который по существу является закодированным .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; 
} 

ответ

16

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

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

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

Смежные вопросы