2012-04-19 19 views
6

का उपयोग करके अटैचमेंट के साथ ईमेल भेजें, मैं अपने आवेदन के माध्यम से ईमेल भेजने के लिए System.Net.Mail का उपयोग कर रहा हूं। मैं अनुलग्नक के साथ निम्नलिखित कोड के साथ ईमेल भेजने की कोशिश कर रहा था।System.Net.Mail

Collection<string> MailAttachments = new Collection<string>(); 
    MailAttachments.Add("C:\\Sample.JPG"); 
    mailMessage = new MailMessage(); 
    foreach (string filePath in emailNotificationData.MailAttachments) 
    { 
     FileStream fileStream = File.OpenWrite(filePath); 
     using (fileStream) 
     { 
     Attachment attachment = new Attachment(fileStream, filePath); 
     mailMessage.Attachments.Add(attachment); 
     } 
    } 
    SmtpClient smtpClient = new SmtpClient(); 
    smtpClient.Host = SmtpHost; 
    smtpClient.Send(mailMessage); 

जब मैं अनुलग्नकों के साथ ईमेल भेजता हूं तो यह निम्नानुसार अपवाद फेंक देता है।

using (fileStream) 
{ 
    Attachment attachment = new Attachment(fileStream, filePath); 
    mailMessage.Attachments.Add(attachment); 
} // <-- file stream is closed here 

हालांकि, धारा stmpClient.Send(mailMessage), जहां यह अब और खुला नहीं है के समय में पढ़ा जाता है:

Cannot access a closed file. 
at System.IO.__Error.FileNotOpen() 
at System.IO.FileStream.Read(Byte[] array, Int32 offset, Int32 count) 
at System.Net.Mime.MimePart.Send(BaseWriter writer) 
at System.Net.Mime.MimeMultiPart.Send(BaseWriter writer) 
at System.Net.Mail.Message.Send(BaseWriter writer, Boolean sendEnvelope) 
at System.Net.Mail.MailMessage.Send(BaseWriter writer, Boolean sendEnvelope) 
at System.Net.Mail.SmtpClient.Send(MailMessage message) 

उत्तर

11

अपने using बयान के समाप्त होने के घुंघराले ब्रेस फ़ाइल धारा बंद कर देता है।

सरल समाधान एक स्ट्रीम के बजाय सिर्फ फ़ाइल नाम प्रदान करना है:

Collection<string> MailAttachments = new Collection<string>(); 
MailAttachments.Add("C:\\Sample.JPG"); 

mailMessage = new MailMessage(); 
foreach (string filePath in emailNotificationData.MailAttachments) 
{ 
    Attachment attachment = new Attachment(filePath); 
    mailMessage.Attachments.Add(attachment); 
} 
SmtpClient smtpClient = new SmtpClient(); 
smtpClient.Host = SmtpHost; 
smtpClient.Send(mailMessage); 
इस समाधान के साथ

, नेट पुस्तकालय, उद्घाटन के बारे में चिंता करने के लिए पढ़ने और फ़ाइल को बंद करने होगा।

+0

हो गया ... मैंने फ़ाइल स्ट्रीम हटा दी है – udaya726