EWS Managed API - Проблемы с запросом на совместное использование календаря - PullRequest
0 голосов
/ 04 февраля 2019

Я хотел бы отправить запрос на совместное использование специальному пользователю, чтобы получить доступ к его элементам календаря.После получения этого сообщения пользователь может принять или отклонить мой запрос.После 2 дней повторного изучения и написания небольшого примера я застрял (как мне кажется) в правильных параметрах (ExtendedPropertyDefinition, таких как PidTagMessageClass и т. Д.).

Пожалуйста, ознакомьтесь со следующими соответствующими фрагментами кода:

public void SendMessage()
{
    byte[] binInitiatorEntryId = Converter.HexStringToByteArray(this.MailboxFunctions.GetIntiatorEntryID(this.Service));

    // This is the Guid of the Sharing Provider in Exchange, and it's value does not change
    Guid PropertySetSharing = new Guid("{AEF00600-0000-0000-C000-000000000046}");

    // Even though I don't think setting this property is mandatory, 
    // it just seemed like the right thing to do and it works so I \
    // ain't messin with it!                                        
    byte[] byteSharingProviderGuid = PropertySetSharing.ToByteArray();

    // Create a new message
    EmailMessage invitationRequest = new EmailMessage(this.Service);
    invitationRequest.Subject = "Sharing request: 'Calendar'";
    invitationRequest.Body = "Sent by Exchange Administrator on behalf of user";
    invitationRequest.From = "sender@mail.com";
    invitationRequest.Culture = "us-US";
    invitationRequest.Sensitivity = Sensitivity.Normal;
    invitationRequest.Sender = "/O=EXCHANGELABS/OU=EXCHANGE ADMINISTRATIVE GROUP (FXDICOHF11SPDLT)/CN=RECIPIENTS/CN=CAA2C1E7A3934797A8258CGG42B337D0-THER";
    invitationRequest.ItemClass = "IPM.Sharing"; /* Constant Required Value [MS-ProtocolSpec] */

    ExtendedPropertyDefinition PidTagMessageClass = new ExtendedPropertyDefinition(0x001A, MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidTagMessageClass, "IPM.Sharing"); /* Constant Required Value [MS-ProtocolSpec] */

    ExtendedPropertyDefinition PidNameContentClass = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.InternetHeaders, "Content-Class", MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidNameContentClass, "Sharing");

    ExtendedPropertyDefinition PidTagNormalizedSubject = new ExtendedPropertyDefinition(0x0E1D, MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidTagNormalizedSubject, "Sharing request: 'Calendar'");

    ExtendedPropertyDefinition PidTagSubjectPrefix = new ExtendedPropertyDefinition(0x003D, MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidTagSubjectPrefix, " ");

    ExtendedPropertyDefinition PidLidSharingProviderGuid = new ExtendedPropertyDefinition(PropertySetSharing, 0x8243, MapiPropertyType.Binary);
    invitationRequest.SetExtendedProperty(PidLidSharingProviderGuid, byteSharingProviderGuid);

    ExtendedPropertyDefinition PidNameXSharingProviderGuid = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.InternetHeaders, "X-Sharing-Provider-GUID", MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidNameXSharingProviderGuid, "AEF0060000000000C000000000000046"); 

    ExtendedPropertyDefinition PidLidSharingProviderName = new ExtendedPropertyDefinition(PropertySetSharing, 0x8244, MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidLidSharingProviderName, "Microsoft Exchange"); 

    ExtendedPropertyDefinition PidNameXSharingProviderName = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.InternetHeaders, "X-Sharing-Provider-Name", MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidNameXSharingProviderName, "Microsoft Exchange"); 

    ExtendedPropertyDefinition PidLidSharingProviderUrl = new ExtendedPropertyDefinition(PropertySetSharing, 0x8245, MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidLidSharingProviderUrl, "http://www.microsoft.com/exchange"); 

    ExtendedPropertyDefinition PidNameXSharingProviderUrl = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.InternetHeaders, "X-Sharing-Provider-URL", MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidNameXSharingProviderUrl, "http://www.microsoft.com/exchange"); 

    ExtendedPropertyDefinition PidLidSharingConfigurationUrl = new ExtendedPropertyDefinition(PropertySetSharing, 0x83D0, MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidLidSharingConfigurationUrl, " "); 

    ExtendedPropertyDefinition PidNameXSharingConfigUrl = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.InternetHeaders, "X-Sharing-Config-Url", MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidNameXSharingConfigUrl, " "); 

    ExtendedPropertyDefinition PidLidSharingFlavor = new ExtendedPropertyDefinition(PropertySetSharing, 0x823D, MapiPropertyType.Integer);
    invitationRequest.SetExtendedProperty(PidLidSharingFlavor, 0x00020500); 

    ExtendedPropertyDefinition PidNameXSharingFlavor = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.InternetHeaders, "X-Sharing-Flavor", MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidNameXSharingFlavor, "20500"); 

    ExtendedPropertyDefinition PidLidSharingCapabilities = new ExtendedPropertyDefinition(PropertySetSharing, 0x823C, MapiPropertyType.Integer);
    invitationRequest.SetExtendedProperty(PidLidSharingCapabilities, 0x00040290); 

    // [MS-OXSHARE] 2.2.2.2
    ExtendedPropertyDefinition PidNameXSharingCapabilities = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.InternetHeaders, "X-Sharing-Capabilities", MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidNameXSharingCapabilities, "40290"); 

    // [MS-OXSHARE] 2.2.2.10
    ExtendedPropertyDefinition PidLidSharingLocalType = new ExtendedPropertyDefinition(PropertySetSharing, 0x824F, MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidLidSharingLocalType, "IPF.Appointment"); 

    // [MS-OXSHARE] 2.2.2.11
    ExtendedPropertyDefinition PidNameXSharingLocalType = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.InternetHeaders, "X-Sharing-Local-Type", MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidNameXSharingLocalType, "IPF.Appointment"); 

    // [MS-OXSHARE] 2.2.2.7
    ExtendedPropertyDefinition PidLidSharingInitiatorEntryId = new ExtendedPropertyDefinition(PropertySetSharing, 0x8249, MapiPropertyType.Binary);
    invitationRequest.SetExtendedProperty(PidLidSharingInitiatorEntryId, binInitiatorEntryId); 

    // [MS-OXSHARE] 2.2.2.8
    ExtendedPropertyDefinition PidLidSharingInitiatorName = new ExtendedPropertyDefinition(PropertySetSharing, 0x8029, MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidLidSharingInitiatorName, "SENDER"); 

    // [MS-OXSHARE] 2.2.2.9
    ExtendedPropertyDefinition PidLidSharingInitiatorSMTP = new ExtendedPropertyDefinition(PropertySetSharing, 0x8248, MapiPropertyType.String);
    invitationRequest.SetExtendedProperty(PidLidSharingInitiatorSMTP, "sender@mail.com");

    // Add recipient info and send message
    invitationRequest.ToRecipients.Add("receiver@mail.com");
    invitationRequest.SendAndSaveCopy();
}

Это основная часть создания сообщения и его отправки.Чтобы понять эту проблему, я использовал следующие ссылки: https://willcode4foodblog.wordpress.com/2012/04/13/understanding-sharing-invitation-requests-ews-managed-api-1-2-part-1/ http://interoperability.blob.core.windows.net/files/MS-OXSHARE/[MS-OXSHARE].pdf (особенно «4.1 Отправка запроса на совместное использование»)

Проблема в том, что созданное сообщение видно в Outlook, нонедействительный.Outlook говорит, что недопустимое сообщение и разрешение / отказ неактивны.

Есть кто-то, кто имеет идею или даже решил ту же проблему?Спасибо!

...