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.