Jak dodać załącznik do wiadomości e-mail z tablicy bajtów?


110

Mam byte[]z zawartością pliku. Chciałbym wysłać go jako załącznik za pomocą System.Net.Mail.

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

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

Czy można przejść byte[]przez to przeciążenie?


BTW, możesz również użyć att.ContentDisposition, jeśli chcesz ustawić inne atrybuty załączonego pliku (np. CreationDate).
John Gilmer

Odpowiedzi:


214

Najprostszy sposób:

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

Zwróć uwagę, że jeśli nie wykonujesz odjazdowych rzeczy z operacjami asynchronicznymi, możesz MemoryStreambezpiecznie pozostawić je w spokoju, co może ułatwić ci życie. Wprawdzie nie ma gwarancji, że tak się stanie w przyszłości, ale myślę, że jest mało prawdopodobne, aby się to zmieniło. Nie widzę żadnej wskazówki, czy usunięcie załącznika powoduje utratę jego strumienia :(


2
Dobra uwaga, zauważyłem podczas dodawania załączników opartych na plikach, musiałem pozbyć się obiektu załącznika, aby zwolnić uchwyt na pliku. Z pewnością strumień powinien być obsługiwany przez GC, ponieważ nie jest to operacja IO?
JL.

FWIW, klasa Attachment firmy Mono, wywołuje Disposestrumień zawartości, az szybkiego przypadku testowego .NET 4.0 robi to samo. Nie jestem zbyt rozbawiony, że tak jest, ale tak jest.
Matt Enright

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.