2010-04-06 12 views
85

Mam plik byte[] z zawartością pliku. Chciałbym wysłać go jako załącznik za pomocą System.Net.Mail.Jak dodać załącznik wiadomości e-mail z tablicy bajtów?

Zauważyłem, że klasa zajęcia ma 1 przeciążenie, które akceptuje strumień.

Attachment att = new Attachment(Stream contentStream,string name); 

Czy to możliwe, aby przejść przez ten byte[] przeciążenia?

Odpowiedz

160

Najprostszy sposób:

Attachment att = new Attachment(new MemoryStream(bytes), name); 

Zauważ, że chyba zrobić ostry rzeczy z operacji asynchronicznych, MemoryStream można bezpiecznie zostawić niezdyspergowanego, które mogą ułatwić życie dla ciebie. Wprawdzie nie ma żadnej gwarancji, że będzie to prawdą w przyszłości, ale myślę, że jest mało prawdopodobne, aby się zmieniło. Nie widzę żadnych wskazówek co do tego, czy utylizacji przywiązania rozporządza swoim strumieniu :(

+1

Dziękuję Jon, dokładnie to, czego potrzebowałem! –

+2

Dobra uwaga, zauważyłem przy dodawaniu załączników opartych na plikach, Musiałem usunąć obiekt załącznika, aby zwolnić uchwyt pliku. Z pewnością strumień powinien być obsługiwany przez GC, ponieważ nie jest to operacja IO? –

+0

@JL: Tak, dokładnie. –

30

Trzeba przekonwertować byte[] do MemoryStream stosując odpowiednią MemoryStream constructor overload.

Attachment att = new Attachment(new MemoryStream(myBytes), name); 

Zauważ, że nazwa Parametr do Attachment's constructor określa nazwę typu zawartości załącznika, a nie samą nazwę samego załącznika.

+2

Wygląda na to, że parametr name jest nazwą pliku, a nie typu zawartości. Zobacz uwagi: https://msdn.microsoft.com/en-us/library/system.net.mime.contenttype.name.aspx –

Powiązane problemy