¿Cómo agregar un archivo adjunto de correo electrónico desde una matriz de bytes?


110

Tengo una byte[]con el contenido del archivo. Me gustaría enviarlo como adjunto usando System.Net.Mail.

Noté que la clase de archivo adjunto tiene 1 sobrecarga que acepta una transmisión.

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

¿Es posible pasar byte[]por esta sobrecarga?


Por cierto, también puede utilizar att.ContentDisposition si desea establecer otros atributos del archivo adjunto (por ejemplo, CreationDate).
John Gilmer

Respuestas:


214

Manera más sencilla:

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

Tenga en cuenta que, a menos que haga cosas MemoryStreamraras con operaciones asincrónicas, es seguro dejarlo sin eliminar, lo que puede facilitarle la vida. Es cierto que no hay garantía de que eso sea cierto en el futuro, pero creo que es poco probable que cambie. No veo ninguna indicación de si deshacerse del archivo adjunto elimina su flujo :(


2
Buen punto, noté que al agregar archivos adjuntos basados ​​en archivos, necesitaba deshacerme del objeto adjunto para liberar un identificador en el archivo. Seguramente el flujo debería ser atendido por GC, porque no es una operación IO.
JL.

FWIW, la clase Attachment de Mono llama Disposeal flujo de contenido, y desde un caso de prueba rápido, .NET 4.0 hace lo mismo. No me divierte mucho que este sea el caso, pero así es.
Matt Enright

34

Debe convertir el en byte[]a MemoryStreamutilizando la sobrecarga del constructor MemoryStream adecuada .

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

Tenga en cuenta que el parámetro de nombre del constructor de Attachment especifica el nombre del tipo de contenido del adjunto, no el nombre del adjunto en sí.


4
Parece que el parámetro de nombre es el nombre del archivo, no el tipo de contenido. Ver comentarios: msdn.microsoft.com/en-us/library/…
Uğur Aldanmaz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.