2011-06-24 18 views
17

Bu benim işlevim. İstemciyi ve iletiyi tümceyi kullanmaya başladım ve kod denetimi çalıştırırken hata alıyorum.Kod denetimi, nesneyi atmam gerektiğini söylüyor. Hangisi?

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); 
       } 
      } 
     } 

fazla bu uyarı edilmektedir: hata noktası ilk satırı kullanarak

uyarı 1 CA2000: Microsoft.Reliability: yöntem 'Email.Send (MailItem)' de, " nesne <> g_ initLocal0 ', tüm özel durum yollarıyla birlikte işaretli değildir. o kapsamı dışındadır tüm kaynaklardan önce nesnenin '<> g _initLocal0' üzerinde System.IDisposable.Dispose çağırın. C: \ CodeWorkspace \ Kod \ Utility \ Email.cs 41

+2

Kodunuzdaki 41 numaralı satırda ne var? – BrokenGlass

+0

@BrokenGlass: Kodunda 41. satırda * nedir? – Mehrdad

+0

@Mehrdad: Bunu göz önünde bulundurmanın imkansız olması, dosyanın içindeki kodun sadece bir kısmı. – BrokenGlass

cevap

18

Senin sorunun bu çizgidir:

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

blok { From = ... } nesne yapımının ardından yürütülen ve daha önce olduğu başlatıcı using blok iç try/finally başlar. MailAddress yapıcısı (veya argüman ifadeleri ya da bir özellik erişimci ise From için atama) bir istisna atar

, MailMessage bertaraf edilmez. o msg atanmaktadır önce

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

geçici <>g_initLocal0 değişken MailMessage adıdır: için

değişikliği.

+0

İçten "From" blok ve voila oluşturuldu! – katit

+0

Bunu daha önce farklı nesnelerle ancak benzer durumlarla karşılaştım. MailMessage yapılandırıldıktan sonra MailAddress ayarlayın. –

İlgili konular