Bir bayt dizisinden bir e-posta eki nasıl eklenir?


110

byte[]Dosyanın içeriğiyle ilgili bir var . Kullanarak ek olarak göndermek istiyorum System.Net.Mail.

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

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

byte[]Bu aşırı yüklemeyi geçmek mümkün mü ?


BTW, ekli dosyanın diğer özniteliklerini (örn. CreationDate) ayarlamak istiyorsanız att.ContentDisposition da kullanabilirsiniz.
— John Gilmer

Yanıtlar:


214

En basit yol:

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

Eşzamansız işlemlerle eğlenceli şeyler yapmadığınız sürece, MemoryStreamelden çıkarılmadan bırakmanın güvenli olduğunu ve bu da hayatı sizin için kolaylaştırabileceğini unutmayın. Kuşkusuz bunun gelecekte doğru olacağına dair bir garanti yok , ancak bence değişmesi pek olası değil. Ekin elden çıkarılmasının akışını imha edip etmediğine dair herhangi bir belirti göremiyorum :(


2
İyi bir nokta, dosya tabanlı ekler eklerken, dosya üzerindeki bir tutamacı serbest bırakmak için ek nesnesini atmam gerektiğini fark ettim. Şüphesiz akış, bir IO operasyonu olmadığı için GC tarafından halledilmelidir?
— JL.

FWIW, Mono'nun Eklenti sınıfı Disposeiçerik akışını çağırır ve hızlı bir test durumundan .NET 4.0 aynı şeyi yapar. Durumun bu olduğu konusunda çok eğlenmiyorum, ama işte burada.
— Matt Enright

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.