2010-06-14 14 views
7

मैं एक साधारण कंसोल ऐप लिखने की प्रक्रिया में हूं जो एक विशेष एक्सचेंज मेलबॉक्स पर नज़र रखता है, और जब विशेष मानदंडों को पूरा करने वाले ईमेल प्राप्त होते हैं, तो ऐप एक एक्सएमएल फाइल अटैचमेंट डाउनलोड करेगा, और ईमेल संग्रहित करें।एक्सचेंज वेब सर्विसेज - प्रसंस्करण संदेश और अटैचमेंट एक्सेसिंग

मैंने ईडब्ल्यूएस ओके से कनेक्ट किया है, और किसी भी ईमेल के माध्यम से लूप करने में सक्षम हूं, लेकिन जब मैं एक ईमेल मैसेज ऑब्जेक्ट बनाने की बात करता हूं तो मैं संघर्ष कर रहा हूं जिसे मैं अनुलग्नकों तक पहुंचने के लिए उपयोग कर सकता हूं।

नीचे दिए गए उदाहरण कोड में, EmailMessage message = EmailMessage.Bind(...) लाइन त्रुटि के बिना निष्पादित करता है, लेकिन जब मैं एक्सेस और गुण या विधियों को एक्सेस करता हूं तो एक वैध संदेश नहीं लौटाता है, मुझे एक त्रुटि मिलती है: 'ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं होता है '।

मैं सी # अकेला EWS देती हैं, ताकि मुझे पता है कि जहां शुरू करने के लिए संघर्ष कर रहा हूँ करने के लिए नए हूँ ...

कोड स्निपेट:

public static void FindItems() 
    { 
     try 
     { 
      ItemView view = new ItemView(10); 
      view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Ascending); 
      view.PropertySet = new PropertySet(
       BasePropertySet.IdOnly, 
       ItemSchema.Subject, 
       ItemSchema.DateTimeReceived); 

      findResults = service.FindItems(
       WellKnownFolderName.Inbox, 
       new SearchFilter.SearchFilterCollection(
        LogicalOperator.Or, 
        new SearchFilter.ContainsSubstring(ItemSchema.Subject, "Sales Enquiry")), 
       view); 

      log2.LogInfo("Total number of items found: " + findResults.TotalCount.ToString()); 

      foreach (Item item in findResults) 
      { 
       log2.LogInfo(item.Id); 

       EmailMessage message = EmailMessage.Bind(service, item.Id, new PropertySet(BasePropertySet.IdOnly, ItemSchema.Attachments)); 

       Console.WriteLine(message.Subject.ToString()); 

       if (message.HasAttachments && message.Attachments[0] is FileAttachment) 
       { 
        FileAttachment fileAttachment = message.Attachments[0] as FileAttachment; 
        fileAttachment.Load("C:\\temp\\" + fileAttachment.Name); 
        fileAttachment.Load(); 
        Console.WriteLine("FileName: " + fileAttachment.FileName); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      log2.LogError(ex.InnerException); 
     } 
    } 

संलग्नक तक पहुँचने के लिए मेरे कोड MSDN से सीधे है तो मुझे आशा है कि यह वहाँ है ... कोई विचार?

+1

मुझे नहीं लगता कि आप विषय पंक्ति को प्रिंट करने में सक्षम होंगे क्योंकि आपकी संपत्ति सेट में विषय शामिल नहीं है। आप उस कोड के साथ एक्सचेंज से क्या लौटा रहे हैं? क्या ईमेल संदेश वस्तु मान्य है? निम्नलिखित मदद कर सकता है: http: //social.technet.microsoft.com/Forums/en/exchangesvrdevelopment/thread/1d7d0be3-1e48-43c4-b2df-f6fa5c7bf254 आप बाध्य करने के लिए आइटम के माध्यम से लूप की जरूरत नहीं है - LoadPropertiesForItems आज़माएं और देखें कि क्या यह काम करता है – Chris

उत्तर

12

मुझे डर है कि मैंने इस समस्या का पुनरीक्षण किया और इसे ठीक करने में कामयाब रहे। दुर्भाग्य से मुझे यहां वापस आने और समाधान दस्तावेज करने के लिए भी दबाया गया था। समय बीत रहा है, और मैं क्या बदल की मेरी स्मृति फीका है, लेकिन जहाँ तक मैं याद कर सकते हैं कि यह एक एक पंक्ति परिवर्तन किया गया:

EmailMessage message = EmailMessage.Bind(service, item.Id, new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.Attachments)); 

यहाँ मुख्य अंतर यह है कि हम के पहले पैरामीटर के रूप में निर्दिष्ट किया है BasePropertySet.FirstClassProperties है प्रॉपर्टीसेट, BasePropertySet.IdOnly की बजाय, जो मूल रूप से हमने किया था।

मेरा मूल कोड ऑनलाइन उदाहरण से उठाया गया था जो ठीक से किया गया था जो मैं प्राप्त करने की कोशिश कर रहा था, इसलिए या तो उदाहरण बिल्कुल सही नहीं था, या मैंने इसे गलत तरीके से लिखा या समस्या के कुछ पहलू को गलत समझा।

0
foreach(EmailMessage message in findResults) 
{ 
    message.Load(); 

    Console.WriteLine(message.Subject.ToString()); 

    if (message.HasAttachments && message.Attachments[0] is FileAttachment) 
    { 
     FileAttachment fileAttachment = message.Attachments[0] as FileAttachment; 
     fileAttachment.Load("C:\\temp\\" + fileAttachment.Name); 
     fileAttachment.Load(); 
     Console.WriteLine("FileName: " + fileAttachment.FileName); 
    } 
} 
संबंधित मुद्दे