Хорошо, пока лучшая информация, которую я получил по этой теме, была в этой теме: EWS-API-Create-Calendar-and-Share-with-reviewer-permissions .Я пытался задать этот вопрос в этой ветке, но на самом деле опубликовал его как ответ, поэтому он был удален администраторами (мой плохой!)
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я сисадмин по профессии и лунный свет в разработке ... такпрошу прощения за любое неправильное использование терминологии или замешательство в словах.
Кроме того, я работаю в C # здесь.
Я прочитал спецификации протокола сообщений от Microsoft и понимаю, что некоторые расширенные свойства требуютчтобы создать элемент сообщения для правильного создания объекта приглашения к совместному использованию, как я понял из поста, упомянутого выше, я могу создать объект сообщения с расширенными свойствами (точнее, SetExtendedProperty(extprop,value)
).Я понимаю, что должен вручную создать расширенные свойства, которые я устанавливаю, используя new ExtendedProperty()
и заполнить правильный родительский GUID, HexID и Datatype для каждого свойства.Из того, что я могу понять, это более или менее "обходной путь", поскольку в API нет встроенных возможностей управления объектами совместного использования ...
Но я столкнулся с проблемой и нуждаюсь в некотором пояснении...
Я хотел вручную создать приглашение на обмен (через клиента, «пользовательский» способ), а затем прикрепить его к сообщению в поле «Отправленные» пользователя, отправившего приглашение.Я хотел перечислить все возможные свойства относительно того, что мне нужно использовать для создания подобного объекта, чтобы я мог использовать его в качестве шаблона и сравнивать свойства своих объектов с исходным приглашением.Я могу получить сообщение отлично и найти много свойств, но не какие-либо "специальные".Единственное, что я могу найти, что отличает элемент сообщения, это тот факт, что это IPM.Sharing
Класс элемента и что он имеет вложение sharing_metadata.xml
.
Но я прав, предполагая, что теперь мы можем создать общий доступприглашения через API с использованием расширенных свойств, это не обязательно означает, что мы можем прочитать эти свойства через API ??
Все, что я пытался перечислить расширенные свойства, похоже, не работает и всегда вместо этого ничего не возвращаетмассива расширенных свойств.Возможно, я делаю это неправильно, но я хотел задать вопрос, прежде чем тратить бесчисленное количество часов, пытаясь достичь чего-то невозможного.
Так что, если я не могу правильно перечислить расширенные свойства, есть ливозможность использовать что-то вроде ExFolders
или MFCMAPI
или что-то подобное для получения этих свойств ???
Есть какие-нибудь мысли / предложения / критические замечания?
Спасибо!
ОБНОВЛЕНИЕ:
Вот функция, с которой я играю, чтобы попытаться создать приглашение на совместное использование для папки календаря пользователя ... Я прокомментировал, где я застрял и что я не полностью оборачиваю:
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();
}