Stream als Anhang zu System.Net.Mail ist 0 Bytes

Ich habe ein Projekt, bei dem ich einen PDF-Generator verwende, um eine Datei an einen Benutzer zu senden. Wir möchten dem Benutzer die Option geben, diese Datei stattdessen an eine E-Mail anzuhängen, und wir haben Probleme, das Stream-Objekt und die Anhangslogik zusammen zu verwenden.

Wir beginnen mit ABCpdf, das zwei Speichermethoden hat: Es kann in einem Stream gespeichert werden, oder wenn Sie ihm einen String geben, wird versucht, ihn in einer Datei auf der Festplatte zu speichern. Wir haben beide kein Problem gemacht.

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

An dieser Stelle ist meistens alles cool -stream hat mehrere Kilobyte Daten, und wenn Sie .Save () in eine Datei speichern, erhalten Sie eine tatsächliche Datei mit der gleichen Anzahl von Bytes.

Deshalb hängen wir an dieser Stelle eine E-Mail an (nachdem wir das E-Mail-Objekt initialisiert haben und An: und Von: usw. eingestellt haben):

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

... was uns dazu bringt, eine E-Mail mit 0 Bytes, aber dem richtigen Dateinamen zu erhalten.

Alle Beispiele, die ich online finde, verwenden einen StreamReader oder einen StreamWriter oder ein Flush () oder ähnliches. Es scheint immer komplizierter zu sein, als nur einen Stream zu übergeben, aber vielleicht sind nur ein oder zwei Zeilen komplizierter. Keines dieser Beispiele beginnt mit einem Stream - sie versuchen immer, ein Array in einen Stream zu verwandeln, um Ihnen zu zeigen, wie einfach das ist, oder eine Datei von der Festplatte zu holen (was wir nicht können, weshalb wir aufgeregt sind) einen Stream benutzen).

Wie auch immer, wenn jemand erklären kann, was ich falsch mache oder was ich tun sollte, würde ich es wirklich zu schätzen wissen. Vielen Dank.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage