2010-04-06 2 views
85

У меня есть byte[] с содержимым файла. Я хотел бы отправить его как приложение с помощью System.Net.Mail.Как добавить вложение электронной почты из массива байтов?

Я заметил, что класс приложения имеет 1 перегрузку, которая принимает поток.

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

Можно ли пройти через эту byte[] перегрузки?

ответ

160

Простейший способ:

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

Обратите внимание, что если вы не будете делать фанки вещи с асинхронными операциями, MemoryStream безопасно оставить нераспределенный, что может сделать жизнь проще для вас. По общему признанию, нет гарантии, что будет правдой в будущем, но я думаю, что это вряд ли изменится. Я не вижу каких-либо указаний относительно того, располагает его потоком :(

+1

Спасибо, Джон, именно то, что мне нужно! –

+2

Хорошо, я заметил, что при добавлении прикрепленных файлов, Мне нужно было удалить объект привязки, чтобы освободить дескриптор файла. Разумеется, поток должен заботиться GC, потому что это не операция ввода-вывода? –

+0

@JL: Да, точно. –

30

выбрасывании вложения Вы должны преобразовать byte[] в MemoryStream с использованием соответствующего MemoryStream constructor overload.

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

Обратите внимание, что имя параметр Attachment's constructor указывает имя типа содержимого приложения, а не имя самого вложения.

+2

Кажется, что параметр name - это имя файла, а не тип содержимого. См. Примечания: https://msdn.microsoft.com/en-us/library/system.net.mime.contenttype.name.aspx –