Подтвердить что ты не робот

Поток как приложение к System.Net.Mail - 0 байт

У меня есть проект, в котором я использую генератор PDF для отправки файла пользователю. Мы хотели бы предоставить пользователю возможность присоединить этот файл к письму вместо этого, и у нас возникают проблемы с использованием объекта Stream и привязки вместе.

Начнем с ABCpdf, который имеет два метода сохранения: он может сохранять в Stream, или если вы даете ему строку, он попытается сохранить файл на диске там. Мы оба сделали без проблем.

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

В настоящее время все в целом классно - stream содержит несколько килобайт данных, а если вы .Save() в файл, вы получаете фактический файл с таким же количеством байтов.

Таким образом, мы присоединяемся к электронной почте в этот момент (после инициализации почтового объекта, устанавливая To: и From: и т.д.):

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

... который доставляет нам до получения электронной почты с 0 байтами, но является правильным именем файла.

Все примеры, которые я нахожу в Интернете, используют StreamReader или StreamWriter или Flush() или что-то в этом роде. Кажется, что это сложнее, чем просто передать Stream, но, может быть, только одна или две строки сложнее. Ни один из этих примеров не начинается с Stream - они всегда пытаются превратить массив в Stream, чтобы показать вам, насколько это легко или захватывать файл с диска (чего мы не можем сделать, поэтому мы взволнованы для использования потока).

В любом случае, если кто-нибудь может объяснить, что я делаю неправильно или что я должен делать, я бы очень признателен. Спасибо.

4b9b3361

Ответ 1

Догадайтесь... Вернуться к потоку до начала до отправки nit

// Set the position to the beginning of the stream.
stream.Seek(0, SeekOrigin.Begin);
mail.Attachments.Add(new Attachment(stream, "myPdf.pdf"));
mail.Send();

Ответ 2

Вы пытались сохранить файл, а затем прикрепить файл, а не пытаться присоединить поток?

добавлен

Нормальный процесс здесь будет

  • Используйте поток для создания файла на диске

  • Прикрепите файл к электронной почте

  • Удалите файл, когда закончите с ним.