Strumień jako załącznik do System.Net.Mail ma 0 bajtów

Mam projekt, w którym używam generatora PDF do wysłania pliku do użytkownika. Chcielibyśmy dać użytkownikowi opcję dołączenia tego pliku do wiadomości e-mail, a my mamy problem z jednoczesnym korzystaniem z obiektu Stream i logiki Attachment.

Zaczynamy od ABCpdf, który ma dwie metody składowania: może zapisać w strumieniu lub jeśli nadasz mu ciąg, spróbuje zapisać go do pliku na dysku. Zrobiliśmy oba problemy bez problemu.

Stream stream = new MemoryStream();
myPdf.Save(stream);

W tym momencie wszystko jest fajne -stream ma kilka kilobajtów danych, a jeśli .Zapisz () do pliku, otrzymasz rzeczywisty plik o tej samej liczbie bajtów.

W tym momencie dołączamy do wiadomości e-mail (po zainicjowaniu obiektu poczty, ustawieniu Na: i Od: itd.):

mail.Attachments.Add(new Attachment(stream, "myPdf.pdf"));
mail.Send();

... co powoduje, że otrzymujemy e-mail z 0 bajtami, ale odpowiednią nazwą pliku.

Wszystkie przykłady, które znajduję online, używają StreamReadera lub StreamWriter lub Flush () lub czegoś takiego. Zawsze wydaje się, że jest to bardziej skomplikowane niż po prostu przekazanie strumienia, ale może tylko jedna lub dwie linie bardziej skomplikowane. Żaden z tych przykładów nie rozpoczyna się od strumienia - zawsze próbują zamienić tablicę w strumień, aby pokazać, jak to jest łatwe, lub pobrać plik z dysku (czego nie możemy zrobić, dlatego jesteśmy podekscytowani użyć strumienia).

W każdym razie, jeśli ktoś może wyjaśnić, co robię źle lub co powinienem zrobić, naprawdę bym to docenił. Dzięki.

questionAnswers(2)

yourAnswerToTheQuestion