Como adicionar um anexo de e-mail de uma matriz de bytes?


110

Eu tenho um byte[]com o conteúdo do arquivo. Eu gostaria de enviar como anexo usando System.Net.Mail.

Percebi que a classe de anexo tem 1 sobrecarga que aceita um fluxo.

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

É possível passar byte[]por essa sobrecarga?


BTW, você também pode usar att.ContentDisposition se quiser definir outros atributos do arquivo anexado (por exemplo, CreationDate).
John Gilmer

Respostas:


214

Maneira mais simples:

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

Observe que, a menos que você faça coisas funky com operações assíncronas, MemoryStreamé seguro deixar sem disposição, o que pode tornar a vida mais fácil para você. É certo que não há garantia de que isso será verdade no futuro, mas acho improvável que mude. Não consigo ver nenhuma indicação de se a eliminação do anexo elimina o seu stream :(


2
Bom ponto, notei que ao adicionar anexos baseados em arquivo, eu precisava descartar o objeto de anexo para liberar um identificador no arquivo. Certamente o fluxo deve ser cuidado pelo GC, porque não é uma operação IO?
JL.

FWIW, a classe Attachment do Mono chama Disposeo fluxo de conteúdo e, em um caso de teste rápido, o .NET 4.0 faz o mesmo. Não estou super divertido que seja esse o caso, mas é isso.
Matt Enright

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.