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.