3

好吧,到目前爲止,我已經獲得有關此主題的最佳信息是在此主題上: EWS-API-Create-Calendar-and-Share-with-reviewer-permissions。我試圖在該主題上提出這個問題,但我實際上已將其作爲回答發佈,因此被管理員刪除(我的糟糕!)EWS:日曆共享邀請和擴展屬性

免責聲明:我是一個由貿易和月光開發的系統管理員......請原諒任何濫用術語或混亂的行爲。

另外,我正在C#這裏工作。

我已經閱讀了微軟的消息協議規範,並理解某些擴展屬性需要在消息項目上創建,以正確創建共享邀請對象我從上面提到的帖子瞭解到,我可以創建一個消息對象與擴展屬性(準確地說是SetExtendedProperty(extprop,value))。我知道我必須使用new ExtendedProperty()手動創建我設置的擴展屬性,並在每個屬性上填充正確的父GUID,HexID和數據類型。從我所能收集的信息來看,這或多或少是一種「解決方法」,因爲API中沒有固有的共享對象管理功能...

但是我碰到了一個問題,需要一些澄清...

我想手動創建共享邀請(通過客戶端,「用戶」方式),然後附加到發送邀請的用戶的已發送郵件框中的郵件。我想枚舉與我需要用來構建類似對象相關的所有可能屬性,以便將其用作模板,並將我的對象屬性與原始邀請進行比較。我可以很好地得到消息並找到許多屬性,但不是任何「特殊」屬性。我能找到的唯一區分郵件項目的事實是它的IPM.Sharing項目類別,並且它具有sharing_metadata.xml的附件。

但是,我是否正確地認爲我們現在可以通過API使用擴展屬性創建共享邀請,這並不意味着我們可以通過API讀取這些屬性?

我試圖枚舉擴展屬性的一切似乎都不起作用,並且始終返回任何內容而不是擴展屬性的數組。也許我做得不對,但我想在花費更多時間嘗試實現一些不可能的事情之前提出這個問題。

所以,如果我不能正確列舉擴展屬性,是否有可能使用像ExFoldersMFCMAPIMFCMAPI或東西來獲得這些屬性?

任何想法/建議/批評?

謝謝!

UPDATE:

繼承人我擺弄,試圖創建一個共享邀請的用戶日曆文件夾功能...我已經作了評論我堅持,什麼我不完全包裹我的頭:

public void CreateCalendarSharingRequest(string folderID, string owner, string sharedToUser) 
    { 
     // LOAD OUR CUSTOM PROPERTIES 
     Guid PropertySetSharing = new Guid("{00062040-0000-0000-C000-000000000046}"); 
     Guid PropertySetInternetHeaders = new Guid("{00020386-0000-0000-C000-000000000046}"); 

     // Sharing Properties 
     ExtendedPropertyDefinition PidLidSharingProviderGuid = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A01, MapiPropertyType.CLSID); 
     ExtendedPropertyDefinition PidLidSharingProvidorName = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A02, MapiPropertyType.String); 
     ExtendedPropertyDefinition PidLidSharingFlavor = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A18, MapiPropertyType.Integer); 
     ExtendedPropertyDefinition PidLidSharingRemoteStoreUid = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A48, MapiPropertyType.String); 
     ExtendedPropertyDefinition PidLidSharingRemoteUid = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A06, MapiPropertyType.String); 
     ExtendedPropertyDefinition PidTagMessageClass = new ExtendedPropertyDefinition(0x001A, MapiPropertyType.String); 
     ExtendedPropertyDefinition PidTagNormalizedSubject = new ExtendedPropertyDefinition(0x0E1D, MapiPropertyType.String); 
     ExtendedPropertyDefinition PidTagSubjectPrefix = new ExtendedPropertyDefinition(0x003D, MapiPropertyType.String); 
     ExtendedPropertyDefinition PidLidSharingCapabilities = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A17, MapiPropertyType.Integer); 
     ExtendedPropertyDefinition PidLidSharingInitiatorEntryId = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A09, MapiPropertyType.Binary); 
     ExtendedPropertyDefinition PidLidSharingConfigurationUrl = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A24, MapiPropertyType.String); 
     ExtendedPropertyDefinition PidLidSharingInitiatorName = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A07, MapiPropertyType.String); 
     ExtendedPropertyDefinition PidLidSharingInitiatorSMTP = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A08, MapiPropertyType.String); 
     ExtendedPropertyDefinition PidLidSharingLocalType = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A14, MapiPropertyType.String); 
     ExtendedPropertyDefinition PidLidSharingRemoteType = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A1D, MapiPropertyType.String); 
     ExtendedPropertyDefinition PidLidSharingRemoteName = new ExtendedPropertyDefinition(PropertySetSharing, 0x8A05, MapiPropertyType.String); 

     // Internet Header Properties 
     ExtendedPropertyDefinition PidNameContentClass = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "Content-Class", MapiPropertyType.String); 
     ExtendedPropertyDefinition PidNameXSharingCapabilities = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Capabilities", MapiPropertyType.String); 
     ExtendedPropertyDefinition PidNameXSharingConfigUrl = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Config-Url", MapiPropertyType.String); 
     ExtendedPropertyDefinition PidNameXSharingFlavor = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Flavor", MapiPropertyType.String); 
     ExtendedPropertyDefinition PidNameXSharingLocalType = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Local-Type", MapiPropertyType.String); 
     ExtendedPropertyDefinition PidNameXSharingRemoteName = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Remote-Name", MapiPropertyType.String); 
     ExtendedPropertyDefinition PidNameXSharingRemoteStoreUid = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Remote-Store-Uid", MapiPropertyType.String); 
     ExtendedPropertyDefinition PidNameXSharingRemoteType = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Remote-Type", MapiPropertyType.String); 
     ExtendedPropertyDefinition PidNameXSharingRemoteUid = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Remote-Uid", MapiPropertyType.String); 
     ExtendedPropertyDefinition PidNameXSharingProviderGuid = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Provider-Guid", MapiPropertyType.String); 
     ExtendedPropertyDefinition PidNameXSharingProviderName = new ExtendedPropertyDefinition(PropertySetInternetHeaders, "X-Sharing-Provider-Name", MapiPropertyType.String); 

      // Bind to the web services and currently selected folder 
     // Get the current list of delegates for this folder 
     ExchangeService service = GetExchangeService(); 

     // Create a new message 
     EmailMessage invitationRequest = new EmailMessage(service); 
     invitationRequest.Subject = "I'd like to share my calendar with you"; 
     invitationRequest.Body = "Send by Exchange Administrator on behalf of user"; 
     invitationRequest.From = GetSMTPAddress(owner); 
     invitationRequest.ItemClass = "IPM.Sharing"; 
     invitationRequest.SetExtendedProperty(PidNameContentClass, "Sharing"); 
     invitationRequest.SetExtendedProperty(PidTagMessageClass, "IPM.Sharing"); 
     invitationRequest.SetExtendedProperty(PidLidSharingFlavor,0x20310); /* Indicates Invitation for a special folder */ 
     invitationRequest.SetExtendedProperty(PidNameXSharingFlavor, "20310"); /* Text representation of SharingFlavor value */ 
     invitationRequest.SetExtendedProperty(PidLidSharingProviderGuid, PropertySetSharing.ToString()); 
     invitationRequest.SetExtendedProperty(PidNameXSharingProviderGuid, PropertySetSharing.ToString()); 
     invitationRequest.SetExtendedProperty(PidLidSharingCapabilities, 0x40290); /* value for Special Folders */ 
     invitationRequest.SetExtendedProperty(PidNameXSharingCapabilities, "40290"); /* Test representation of SharingCapabilities value */ 

     // THIS IS WHERE IM STUCK - I understand how to set some of the properties like above, but then 
     // it starts needing the entryID properties for the folder being shared, etc...and I'm not entirely 
     // sure which properties I have to set and how many can/will be autopopulated by the transport provider 
     // All i wanna do is send an invite message for sharing the calendar folder from one user to another! 

     // Add recipient info 

     //invitationRequest.ToRecipients.Add(sharedToUser); 
     //invitationRequest.SendAndSaveCopy(); 

    } 
+0

更新:我一直在玩MFCMAPI,所以這看起來是一種去理解的方式邀請消息對象的屬性如何顯示。我認爲我能夠「構建」共享邀請消息的正確途徑,但最初的問題依然存在:是否我們只能創建對象,但不能通過EWS讀取「共享邀請特定」屬性? – WillCodeForFood 2012-03-31 21:03:25

+0

更新2:我正在更新,因爲我在這方面取得進展,以便將來用戶搜索如何執行此操作的答案)使用MFCMAPI,瀏覽創建邀請的用戶的已發送項目的消息存儲庫(當然,這意味着您可以模仿)。您可以找到消息並將消息的所有屬性導出到xml文件。我正在打印此文件,以便在閒暇時進行篩選,並在更多發現時進行更新... – WillCodeForFood 2012-03-31 21:12:57

+0

更新3:好吧,現在我找到了一個名爲EWSEditor的工具,由微軟團隊推出。這使我可以更好地查看郵件及其屬性。我發現我可以用它來瀏覽郵件和附件,並提供更好的細節。希望我能稍後發佈一些信息......但我相信你必須創建共享邀請信息,創建共享附件併發送這些信息。因此,需要熟悉的add'l規範是[MS-OXSHRMSG]文檔在此[鏈接]說明(http://msdn.microsoft.com/en-us/library/cc425499(v = exchg.80))。 ASPX) – WillCodeForFood 2012-04-03 16:41:15

回答

2

嗯,我想通了......但它並不容易。如果您對我如何通過Exchange 2010的EWS API 1.2發送共享邀請感興趣,您可以閱讀關於它的更多信息here