Wie füge ich einen E-Mail-Anhang aus einem Byte-Array hinzu?


110

Ich habe eine byte[]mit dem Inhalt der Datei. Ich möchte es als Anhang mit senden System.Net.Mail.

Ich habe festgestellt, dass die Anhangsklasse 1 Überladung hat, die einen Stream akzeptiert.

Attachment att = new Attachment(Stream contentStream,string name);

Ist es möglich, byte[]diese Überlastung zu überwinden?


Übrigens können Sie auch att.ContentDisposition verwenden, wenn Sie andere Attribute der angehängten Datei festlegen möchten (z. B. CreationDate).
John Gilmer

Antworten:


214

Einfachster Weg:

Attachment att = new Attachment(new MemoryStream(bytes), name);

Beachten Sie, dass es MemoryStreamunbedenklich ist , wenn Sie keine funky Dinge mit asynchronen Operationen ausführen, was das Leben für Sie einfacher machen kann. Zugegeben, es gibt keine Garantie dafür , dass dies in Zukunft der Fall sein wird, aber ich denke, es ist unwahrscheinlich, dass sich dies ändern wird. Ich kann keinen Hinweis darauf sehen, ob die Entsorgung des Anhangs über seinen Stream verfügt :(


2
Gut, ich habe festgestellt, dass ich beim Hinzufügen dateibasierter Anhänge das Anhangsobjekt entsorgen musste, um ein Handle für die Datei freizugeben. Sicherlich sollte der Stream von GC erledigt werden, da es sich nicht um eine E / A-Operation handelt.
JL.

FWIW, die Anhangsklasse von Mono, ruft Disposeden Inhaltsstrom auf, und in einem kurzen Testfall macht .NET 4.0 dasselbe. Ich bin nicht besonders amüsiert, dass dies der Fall ist, aber da ist es.
Matt Enright

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.