Ich habe ein Projekt, wo ich einen PDF-Generator verwenden, 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 es fällt uns schwer, das Stream-Objekt und die Anhangslogik gemeinsam zu verwenden.Stream als Anhang zu System.Net.Mail ist 0 Bytes
Wir beginnen mit ABCpdf, das über zwei Speichermethoden verfügt: Es kann in einem Stream gespeichert werden, oder wenn Sie eine Zeichenfolge eingeben, versucht es in einer Datei auf der Festplatte zu speichern. Wir haben beide kein Problem gemacht.
Stream stream = new MemoryStream();
myPdf.Save(stream);
Alles ist an dieser Stelle meist cool - stream
mehrere Kilobyte Daten hat, und wenn Sie .Save() in eine Datei, erhalten Sie eine aktuelle Datei mit der gleichen Anzahl von Bytes.
So legen wir auf eine E-Mail an dieser Stelle (nach dem Mail-Objekt initialisiert wird, Einstellung zu: und Von :, etc.):
mail.Attachments.Add(new Attachment(stream, "myPdf.pdf"));
mail.Send();
... die uns als Empfangen einer E-Mail bis bekommt mit 0 Bytes, aber der richtige Dateiname.
Alle Beispiele, die ich online finde, verwenden einen StreamReader oder einen StreamWriter oder einen Flush() oder so. Es scheint immer komplizierter zu sein, als einfach einen Stream zu übergeben, aber vielleicht 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 verwenden).
Wie auch immer, wenn jemand erklären kann, was ich falsch mache oder was ich tun soll, würde ich es sehr schätzen. Vielen Dank.
Falls es jemand hilft, war meine Befestigung 64 Bytes, aber es sagte, die Datei ungültig zu öffnen. Die folgende Lösung behebt dies auch, so dass es nicht nur 0 Byte heißt. –