2011-01-11 15 views
12

मैं अपने दृष्टिकोण मेल बॉक्स में अपठित आइटम देखने के लिए इस कोड को लिखा गया है और यहाँ है कोड है:COM वस्तु कास्ट करने में असमर्थ माइक्रोसॉफ्ट दृष्टिकोण और सी #

Microsoft.Office.Interop.Outlook.Application app; 
Microsoft.Office.Interop.Outlook.Items items; 
Microsoft.Office.Interop.Outlook.NameSpace ns; 
Microsoft.Office.Interop.Outlook.MAPIFolder inbox; 

Microsoft.Office.Interop.Outlook.Application application = new Microsoft.Office.Interop.Outlook.Application(); 
     app = application; 
     ns = application.Session; 
     inbox = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); 
     items = inbox.Items; 
     foreach (Microsoft.Office.Interop.Outlook.MailItem mail in items) 
     { 
      if (mail.UnRead == true) 
      { 
       MessageBox.Show(mail.Subject.ToString()); 
      } 
     } 

लेकिन foreach पाश पर मैं इस हो रही है त्रुटि:

"Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Outlook.MailItem'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{00063034-0000-0000-C000-000000000046}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))."

क्या आप कृपया इस त्रुटि को हल करने में मेरी सहायता कर सकते हैं?

+0

इस एक ऐड-इन है? – Bolu

+0

@ बोल्लू नहीं, यह वही है जो मैं अपने सी # विंडोज अनुप्रयोग – Zerotoinfinity

+1

में लिख रहा हूं MAPIFolder को बहिष्कृत किया गया है, इसके बजाए फ़ोल्डर का उपयोग करें। –

उत्तर

19

मुझे थोड़ी देर पहले आपकी समस्या की तरह कुछ मिलना पड़ा।

 foreach (Object _obj in _explorer.CurrentFolder.Items) 
     { 
      if (_obj is MailItem) 
      { 
       MyMailHandler((MailItem)_obj); 
      } 
     } 

आशा है कि मदद करता है।

यहां मुद्दा यह है कि _explorer.CurrentFolder.Items में MailItem (PostItem उनमें से एक होने) से अधिक ऑब्जेक्ट्स हो सकती हैं।

+0

मुझे निम्न पंक्ति पर एक ही त्रुटि मिल रही है Microsoft.Office.Interop.Outlook.Aplication अनुप्रयोग = नया Microsoft.Office.Interop.Outlook .आवेदन(); – Meer

3

जब मैंने इसका परीक्षण किया तो निम्न कोड ठीक काम करता था। लेकिन मुझे जिक्र करना चाहिए कि मेरा संदर्भ "माइक्रोसॉफ्ट आउटलुक 14.0 ऑब्जेक्ट लाइब्रेरी" था। क्या आप एक और संस्करण का उपयोग करते हैं?

 
    public class Outlook 
    { 
    readonly Microsoft.Office.Interop.Outlook.Items  _items; 
    readonly Microsoft.Office.Interop.Outlook.NameSpace _ns; 
    readonly Microsoft.Office.Interop.Outlook.MAPIFolder _inbox; 
    readonly Microsoft.Office.Interop.Outlook.Application _application = new Microsoft.Office.Interop.Outlook.Application(); 

    public Outlook() 
    { 
     _ns = _application.Session; 
     _inbox = _ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); 
     _items = _inbox.Items; 

     foreach (var item in _items) 
     { 
      string subject= string.Empty; 
      var mail = item as Microsoft.Office.Interop.Outlook.MailItem; 
      if (mail != null) 
       var subject = mail.Subject; 
      else 
       Debug.WriteLine("Item is not a MailItem"); 
     } 
    } 
    } 

कृपया ध्यान दें कि Outlook में, कई मदों, कुछ सामान्य गुण होते हैं (उदाहरण के लिए सीमा समाप्ति समय) ताकि आप कर सकते हैं, एक हताश समाधान के रूप में, एक "गतिशील" डेटाप्रकार का उपयोग करें - या तो अज्ञात वस्तु प्रकारों के लिए फ़ॉलबैक परिदृश्य के रूप में या आपके डिफ़ॉल्ट के रूप में (जब तक आप प्रदर्शन हिट के साथ ठीक हो)।

+0

मैंने कोशिश की और मुझे यह संदेश मिला: इंटरफ़ेस 'माइक्रोसॉफ्ट.ऑफिस.इंटरोप.ऑटlook.पोस्टइटम' टाइप करने के लिए 'System .__ ComObject' प्रकार के COM ऑब्जेक्ट को कास्ट करने में असमर्थ। यह ऑपरेशन विफल हो गया क्योंकि आईआईडी '{00063024-0000-0000-C000-000000000046}' के साथ इंटरफ़ेस के लिए COM घटक पर क्वेरी इंटरफ़ेस कॉल निम्न त्रुटि के कारण विफल रहा: ऐसा कोई इंटरफ़ेस समर्थित नहीं है (HRESULT: 0x80004002 (E_NOINTERFACE) से अपवाद) । – Zerotoinfinity

+0

यह मेरे लिए Outlook 2016 के साथ काम करता है, नवीनतम Microsoft.Office.Interop.Outlook.dll – Ben

6

उसके गुण की जाँच से पहले जाँच करने के लिए आइटम में एक मान्य mailitem है कोशिश:

foreach (Object mail in items) 
{ 
    if ((mail as Outlook.MailItem)!=null && (mail as Outlook.MailItem).UnRead == true) 
    { 
     MessageBox.Show((mail as Outlook.MailItem).Subject.ToString()); 
    } 
} 
संबंधित मुद्दे

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