बाइट सरणी से एक ईमेल अनुलग्नक कैसे जोड़ें?


110

मेरे पास byte[]फ़ाइल की सामग्री है। मैं इसे अटैचमेंट के रूप में भेजना चाहूंगा System.Net.Mail

मैंने देखा कि अटैचमेंट क्लास में 1 अधिभार है जो एक धारा को स्वीकार करता है।

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

क्या byte[]इस अधिभार से गुजरना संभव है ?


BTW, यदि आप संलग्न फ़ाइल (जैसे क्रिएशनडेट) की अन्य विशेषताओं को सेट करना चाहते हैं, तो आप att.ContentDisposition का उपयोग भी कर सकते हैं।
जॉन गिल्मर

जवाबों:


214

सबसे सरल तरीका:

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

ध्यान दें कि जब तक आप अतुल्यकालिक संचालन के साथ कायरता MemoryStreamभरा सामान नहीं करते हैं, तब तक उसे छोड़ना सुरक्षित है, जो आपके लिए जीवन को आसान बना सकता है। निश्चित रूप से इसकी कोई गारंटी नहीं है कि यह भविष्य में सच होगा, लेकिन मुझे लगता है कि यह संभावना नहीं है कि यह बदल जाएगा। मैं इस बात का कोई संकेत नहीं देख सकता कि क्या अटैचमेंट का निपटारा इसकी धारा के निपटान के लिए है :(


2
अच्छी बात यह है कि, मैंने फ़ाइल आधारित अटैचमेंट्स को जोड़ने पर ध्यान दिया, मुझे फ़ाइल पर एक हैंडल जारी करने के लिए अटैचमेंट ऑब्जेक्ट को डिस्पोज़ करने की आवश्यकता थी। निश्चित रूप से जीसी द्वारा धारा का ध्यान रखा जाना चाहिए, क्योंकि इसका आईओ ऑपरेशन नहीं है?
जेएल

FWIW, मोनो की अटैचमेंट क्लास Disposeकंटेंट स्ट्रीम पर कॉल करती है, और क्विक टेस्ट केस से, .NET 4.0 भी ऐसा ही करती है। मैं सुपर-एम्यूल्ड नहीं हूं कि यह मामला है, लेकिन यह है।
मैट एनराइट

34

आप बदलने की आवश्यकता byte[]एक करने के लिए MemoryStreamउपयुक्त का उपयोग कर MemoryStream निर्माता अधिभार

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

ध्यान दें कि अटैचमेंट के कंस्ट्रक्टर का नाम पैरामीटर अटैचमेंट के कंटेंट टाइप का नाम निर्दिष्ट करता है, न कि अटैचमेंट का नाम।


4
ऐसा लगता है कि नाम पैरामीटर फ़ाइल का नाम है, सामग्री प्रकार नहीं। टिप्पणी देखें: msdn.microsoft.com/en-us/library/…
Uğur Aldanmaz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.