EWS:日历共享邀请和扩展属性

2024-03-11

好的,到目前为止,我获得的有关该主题的最佳信息是在这个线程上:EWS-API-创建日历并与审阅者共享权限 https://stackoverflow.com/questions/7503613/ews-api-create-calendar-and-share-with-reviewer-permissions?answertab=oldest#tab-top。我尝试在该线程上问这个问题,但实际上我将其作为答案发布,因此它被管理员删除(我的错!)

免责声明:我是一名系统管理员,从事行业和兼职开发工作……所以请原谅任何术语的误用或措辞上的混乱。

另外,我在这里用 C# 工作,仅供参考。

我已阅读微软的消息协议规范,并了解需要在消息项目上创建某些扩展属性才能正确创建共享邀请对象我从上面提到的帖子中了解到,我可以创建具有扩展属性的消息对象(SetExtendedProperty(extprop,value)准确地说)。我知道我必须手动创建我正在设置的扩展属性new ExtendedProperty()并在每个属性上填充正确的父 GUID、十六进制 ID 和数据类型。据我所知,这或多或少是一种“解决方法”,因为 API 中没有内置的固有共享对象管理功能......

但我遇到了一个障碍,需要一些澄清......

我想手动创建共享邀请(通过客户端,“用户”方式),然后附加到发送邀请的用户的“已发送邮件”框中的消息。我想枚举与构建类似对象所需的所有可能属性,以便我可以将其用作模板并将我的对象属性与原始邀请进行比较。我可以很好地获取消息并找到许多属性,但找不到任何“特殊”属性。我能发现的唯一区分消息项目的事实是它是IPM.Sharing项目类别及其附件sharing_metadata.xml.

但是我现在假设我们可以通过使用扩展属性通过 API 创建共享邀请,这并不一定意味着我们可以通过 API 读取这些属性,这是正确的吗?

我尝试枚举扩展属性的所有内容似乎都不起作用,并且总是返回任何内容而不是扩展属性数组。也许我做得不对,但我想在花费无数时间尝试实现不可能的事情之前先问这个问题。

因此,如果我无法正确枚举扩展属性,是否有可能使用类似的东西ExFolders or MFCMAPI或获得这些属性的东西???

有什么想法/建议/批评吗?

Thanks!

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();

    }

好吧,我想通了……但这并不容易。如果您对我如何获得通过 Exchange 2010 的 EWS API 1.2 发送的共享邀请感兴趣,您可以阅读相关内容here http://willcode4foodblog.wordpress.com/2012/04/13/understanding-sharing-invitation-requests-ews-managed-api-1-2-part-1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EWS:日历共享邀请和扩展属性 的相关文章

随机推荐

  • PostgreSQL 子查询使用 like

    假设我有第一张这样的桌子 分支表 name description 123456ABC FOO 553646DEF FO2 第二个表是这样的 余额表 name description ABC oof DEF 2of 我想查询余额表 其中每一
  • Windows Server 2008 的传真服务器替代方案

    为了在内部发送传真 我们一直使用以下 Coldfusion 代码来创建处理传真的对象
  • 查找 google 何时自动完成返回零结果

    我使用谷歌地点自动完成功能来提供地点建议 现在这就是我想要的 当用户输入不在谷歌数据库中的位置时 即谷歌返回零结果时 我需要能够捕获零结果事件 并触发我的客户自动完成功能 当谷歌返回零结果时我如何找到 如果结果为零 autocomplete
  • 构建 Apk 时出错:com.android.build.api.transform.TransformException:生成主 dex 列表时出错

    在项目到两个库模块和一个应用程序模块之后 Android Studio 无法构建 Apk 但是当我将项目构建到真实设备或模拟器中时 它可以完美运行 这是我在 消息 选项卡中遇到的完整堆栈错误 FAILURE Build failed wit
  • 是什么导致 HttpListener HTTP 503 错误?

    因此 我们有一个大型程序 它使用 HttpListener 来实现小型远程管理功能 由于我不明白的原因 有些人遇到了 503 错误的问题 由于我们没有提供错误 因此框架中发生了一些事情 现在 我的问题是 框架内部是什么导致了这个错误 是前缀
  • 创建 .p12 文件

    Using openssl 我创建了一个私钥 如下所示 openssl genrsa out myKey pem 然后 生成csr应CA的要求 我已执行以下操作 openssl req new key myKey pem out cert
  • 如何将 Istio Service Mesh 从 http 升级到 http2?

    我们使用 Kubernetes 并使用 Istio Service Mesh 目前 网关中存在针对 HTTPS 的 SSL 终止 我在 istio proxy 日志中看到 HTTP 协议是 HTTP 1 1 由于 HTTP2 的各种优点 我
  • 如何在python的tkinter中设置Treeview的宽度

    最近 我使用tkinter TreeView显示许多列Python 具体来说 树视图中有 49 列数据 我用grid管理我的小部件 我发现树视图的宽度仅取决于列的宽度 我的问题是 如何设置 Treeview 的宽度 默认宽度是所有列宽度的总
  • 循环地址对齐如何影响 Intel x86_64 上的速度?

    我发现相同的 C 代码编译为完全相同的机器指令但位于不同对齐的地址时性能下降了 15 当我的小主循环从 0x415220 开始时 它比从 0x415250 开始时要快 我在 Intel Core2 Duo 上运行它 我在 x86 64 Ub
  • 在 Mac OS 下设置 COBOL 编译器?

    在我的大学里 我们正在学习 COBOL 我正努力在明年上课之前抢先学习 COBOL C 和 Java 问题是 COBOL 是so旧的 很难在 mac 中获得对它的支持 我的笔记本电脑是 mac 我知道它在 Mac 上运行良好 但找到可以解释
  • 如何以全屏模式启动 NSWindow

    我正在 Xcode 5 中为 Macos 开发一个应用程序 我想全屏显示我的第一个窗口 没有工具栏 只有我的视图 我找到了一种在角落显示全屏按钮的方法 AppDelegate m void applicationDidFinishLaunc
  • BCL(基类库)与 FCL(框架类库)

    两者有什么区别 我们可以互换使用它们吗 基类库 BCL 字面意思就是基础 它包含基本的基本类型 例如System String and System DateTime 框架类库 FCL 是更广泛的库 包含全部内容 ASP NET WinFo
  • 使用 docker-compose 时无法连接到 postgres

    我是 docker 的新手 仍在学习如何使用它 我正在尝试使用 docker compose 一起运行 Django 和 Postgres 它们运行完美 迁移完成 一切顺利 但我有一个问题 无法使用 pgAdmin4 连接到数据库来查看数据
  • C# 序列化到文件,如果存在则覆盖

    我有以下方法 如下 您可以看到它将对象序列化为 XML 文件 我遇到的主要问题是我想获得覆盖文件 如果存在 的函数 我知道如果该文件确实存在 我可以先删除该文件 但这也意味着我可能会导致一些错误拖入我的应用程序 所以我想要一个全有或全无的覆
  • volley 磁盘缓存内存不足问题

    在我的 Android 应用程序中 我使用 Volley 在自定义列表视图中加载图像 当我多次刷新 删除所有项目并加载 tiem 列表视图时 我的应用程序被这条消息杀死 我该如何修复它 04 26 13 08 01 038 E dalvik
  • tmux:挂起并且不加载,并且不响应任何选项命令

    我已经在 Fedora 的本地空间上从源代码安装了 tmux 到目前为止 它运行良好 但突然无法再运行它 当运行 tmux 时 它就停止了 尝试了不同的命令选项 例如 ls sessions 但没有任何效果 杀死我的用户的所有进程 删除 t
  • maven 编译无法识别我的本地存储库依赖项

    我有一个本地 jar 文件要导入到我的文件夹中 并且我已经运行了 mvn install mvn install install file Dfile C myapp Development core target api core 1 0
  • 如何在启动 iex 会话时执行一些命令?

    假设我想在项目的根路径中启动 iex 时实现一些命令 例如 Logger configure level info require Ecto Query alias MyApp User and so on 我想在每次启动 iex 时自动执
  • SimpUserRegistry 不包含任何会话对象

    我是 Websockets 新手 我一直在尝试使用 SimpUserRegistry 来查找主体的会话对象 我编写了一个自定义握手处理程序 将匿名用户转换为经过身份验证的用户 并且我能够从 Websocket 会话对象访问主体名称 自定义握
  • EWS:日历共享邀请和扩展属性

    好的 到目前为止 我获得的有关该主题的最佳信息是在这个线程上 EWS API 创建日历并与审阅者共享权限 https stackoverflow com questions 7503613 ews api create calendar a