2011-06-24 12 views
17

यह मेरा काम है। मैंने क्लॉज का उपयोग करने में क्लाइंट और संदेश दोनों को पहले से ही लपेट लिया है और कोड निरीक्षण चलाने पर अभी भी त्रुटि प्राप्त होती है।कोड निरीक्षण कहता है कि मुझे वस्तु का निपटान करने की आवश्यकता है। कौनसा?

public static void Send(MailItem mail) 
     { 
      var sender = Membership.GetUser(mail.CreatedBy); 
      if (sender == null) 
      { 
       return; 
      } 

      using (var msg = new MailMessage { From = new MailAddress(ConfigurationManager.AppSettings["EmailSender"], ConfigurationManager.AppSettings["EmailSenderName"]) }) 
      { 
       foreach (var recipient in mail.MailRecipients) 
       { 
        var recipientX = Membership.GetUser(recipient.UserKey); 
        if (recipientX == null) 
        { 
         continue; 
        } 

        msg.To.Add(new MailAddress(recipientX.Email, recipientX.UserName)); 
       } 

       msg.Subject = "[From: " + sender.UserName + "]" + mail.Subject; 
       msg.Body = mail.Body; 

       if (HttpContext.Current != null) 
       { 
        msg.Body += Environment.NewLine + Environment.NewLine + "To reply via Web click link below:" + 
           Environment.NewLine; 
        msg.Body += ConfigurationManager.AppSettings["MailPagePath"] + "?AID=" + 
           ContextManager.CurrentAccount.AccountId + "&RUN=" + sender.UserName; 
       } 

       try 
       { 
        using (var emailClient = new SmtpClient()) 
        { 
         emailClient.Send(msg); 
        } 
       } 
       catch (Exception ex) 
       { 
        Logger.LogException(ex); 
       } 
      } 
     } 

यह मैं चेतावनी है:: त्रुटि अंक पहली पंक्ति का उपयोग करने के

चेतावनी 1 CA2000: Microsoft.Reliability: विधि 'Email.Send (MailItem)' में, वस्तु ' <> g_ initLocal0 'को सभी अपवाद पथों के साथ का निपटारा नहीं किया गया है। कॉल करें System.IDisposable। ऑब्जेक्ट '<> जी _initLocal0' पर सभी से पहले संदर्भ दायरे से बाहर हैं। C: \ CodeWorkspace \ कोड \ उपयोगिता \ Email.cs 41

+2

ठीक है आपके कोड में लाइन 41 पर क्या है? – BrokenGlass

+0

@ ब्रोकनग्लस: उसके कोड में लाइन 41 पर * क्या * है? – Mehrdad

+0

@Mehrdad: इस पर विचार करना असंभव है फ़ाइल के भीतर कोड का केवल एक हिस्सा है। – BrokenGlass

उत्तर

18

आपकी समस्या इस लाइन है:

using (var msg = new MailMessage { From = new MailAddress(ConfigurationManager.AppSettings["EmailSender"], ConfigurationManager.AppSettings["EmailSenderName"]) }) 

प्रारंभकर्ता ब्लॉक { From = ... } के बाद वस्तु का निर्माण किया है और मार डाला जाता है से पहले using ब्लॉक के आंतरिक try/finally शुरू करना।

MailAddress निर्माता (या इसके तर्क भाव, या From अगर यह एक संपत्ति एक्सेसर है असाइनमेंट) एक अपवाद फेंकता है, तो MailMessage निपटारा नहीं किया जाएगा।

बदलें:

using (var msg = new MailMessage()) 
{ 
    msg.From = new MailAddress(ConfigurationManager.AppSettings["EmailSender"], ConfigurationManager.AppSettings["EmailSenderName"]); 
    ... 
} 

अस्थायी <>g_initLocal0 चर MailMessage के नाम से पहले ही msg करने के लिए आवंटित हो जाता है।

+0

ब्लॉक और वॉयला के अंदर "से" का निर्माण किया गया है! – katit

+0

मुझे विभिन्न ऑब्जेक्ट्स लेकिन समान परिस्थितियों के साथ पहले इसका सामना करना पड़ा है। MailMessage के निर्माण के बाद MailAddress सेट करें। –

संबंधित मुद्दे

 संबंधित मुद्दे