2014-12-03 1 views
3

Я пытаюсь вернуть файл eml через браузер пользователю. Дело в том, что нет статического файла eml - страница его создает. Я могу построить сообщение образца в MimeKit, используя следующий методВозврат сообщения MimeKit в виде файла в браузер

public FileResult TestServe() 
{ 
    var message = new MimeMessage(); 
    message.From.Add(new MailboxAddress("Joey", "[email protected]")); 
    message.To.Add(new MailboxAddress("Alice", "[email protected]")); 
    message.Subject = "How you doin?"; 

    message.Body = new TextPart("plain") 
    { 
     Text = @"Hey Alice, 

     What are you up to this weekend? Monica is throwing one of her parties on 
     Saturday and I was hoping you could make it. 

     Will you be my +1? 

     -- Joey 
     " 
    }; 

    MemoryStream stream = new MemoryStream(); 
    IFormatter formatter = new BinaryFormatter(); 
    formatter.Serialize(stream, message); 

    return File(stream, "message/rfc822"); 
} 

Но когда я запускаю его я получаю эту ошибку

Type 'MimeKit.MimeMessage' in Assembly 'MimeKit, Version=0.27.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable. 

Есть ли способ обойти это? Я могу написать eml в временную папку, но, очевидно, это связано с хитом производительности, поэтому я бы предпочел. Есть идеи?

+0

Вы пробовали с помощью [WriteTo] (http://jstedfast.github.io/MimeKit/docs/MimeKit/MimeMessage.html #M: MimeKit.MimeMessage.WriteTo (System.IO.Stream, System.Threading.CancellationToken)) и передать новый поток памяти? – Jan

ответ

6

Как было предложено в комментариях вы можете использовать WriteTo метод:

var stream = new MemoryStream(); 
message.WriteTo(stream); 
stream.Position = 0; 

return File(stream, "message/rfc822"); 
+0

спасибо, я попробую попробовать – roryok

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