2010-04-06 20 views
85

Dosya içeriğiyle birlikte bir byte[] sahibim. System.Net.Mail'u kullanarak bir ek olarak göndermek istiyorum.Bayt dizisinden e-posta eki nasıl eklenir?

Ek sınıfı, bir akışı kabul eden 1 aşırı yüke sahip olduğunu fark ettim.

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

bu aşırı yük yoluyla byte[] geçmek mümkün mü?

cevap

160

kolay yoludur: Eğer asenkron operasyonlarla korkak şeyler olmadıkça MemoryStream sizin için daha kolay hayat kurmak verebilecek gönülsüz bırakmak güvenli olduğunu

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

Not. Kuşkusuz, gelecekte bu doğru olacağına dair garanti garantisi yoktur, ancak bunun değişeceğine ihtimalim yoktur. Ben. Uygun MemoryStream constructor overload kullanarak MemoryStream için byte[] dönüştürmek gerekir eki elden kendi akışına :(

+1

Teşekkür ederim Jon, tam ihtiyacım olan şey! –

+2

İyi nokta, dosya tabanlı ekler eklerken fark ettim, Dosyadaki bir tanıtıcıyı serbest bırakmak için ek nesnesini atmam gerekiyordu. Elbette akış, GC tarafından kontrol edilmelidir, çünkü onun bir IO operasyonu değil midir? –

+0

@JL: Evet, tam olarak. –

30

elden olmadığı konusunda herhangi bir işaret bkz

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

Not adı mı olamaz parametresi Attachment's constructor, ekin adını değil, ekin adını belirtir.

+2

Görünüşe göre isim parametresi, içerik türü değil, dosyanın adıdır. Açıklamalara bakın: https://msdn.microsoft.com/en-us/library/system.net.mime.contenttype.name.aspx –