使用 C# 获取共享邮箱的用户

Posted

技术标签:

【中文标题】使用 C# 获取共享邮箱的用户【英文标题】:Get users of Shared Mailbox using C# 【发布时间】:2019-04-23 16:45:24 【问题描述】:

我正在编写一些 5 年前的代码,该代码连接到 AD 并检查登录用户是否是共享邮箱的一部分。

现有逻辑:

当前代码使用属性“msExchMailboxSecurityDescriptor”将所有“Trustee”附加到邮箱。然后根据给定的用户 ID 检查此“受托人”值以确定用户是否有权访问邮箱。

直到最近一切正常。我猜我无法访问或查看的 Exchange Server 设置发生了变化。

我的问题在一行中:

C# 中是否有检查用户是否有权访问共享邮箱的功能?

调查结果:

我已经检查了“publicDelegates”和“nTSecurityDescriptor” 属性,并没有列出所有用户。

我知道有 PowerShell 命令可以获取此信息,但这些只是本地命令 - 这对我没有用

我相信有 EWS 方法可以连接到邮箱,但没有遇到任何有关检查邮箱用户访问权限的 EWS 方法的文档或示例。即使有 EWS 方法,我相信它也可以在用户名和密码的基础上工作 + 我不确定是否需要在 Exchange Server 上启用某些东西才能使用 EWS。

关于如何破解这个的任何指针?

【问题讨论】:

【参考方案1】:

在扩展 MAPI(C++ 或 Delphi)级别,GAL 提供程序公开了 PR_EMS_AB_PUBLIC_DELEGATESPR_EMS_AB_PUBLIC_DELEGATES_BL 列表,您可以将它们打开为 IMAPITable。您可以在OutlookSpy 中查看数据 - 单击 IMAPISession 按钮,QueryIdentity,转到 PR_EMS_AB_PUBLIC_DELEGATES 选项卡。

如果原始扩展不是一个选项,您可以使用Redemption 及其RDOAddressEntry.DelegatesIsDelegateFor 属性。 RDOAddressEntry 可以从 RDOSession.CurrentUser 属性中检索到。

【讨论】:

以上是关于使用 C# 获取共享邮箱的用户的主要内容,如果未能解决你的问题,请参考以下文章

C# 如何从 Outlook 的共享邮箱发送邮件并将其保存在已发送文件夹中

EWS:来自日历 FolderId 的邮箱地址,这可能吗?

Exchange Server 2016管理系列课件18.创建和管理共享邮箱

C# “用户注册“板块开发 发送邮箱验证码

C# “用户注册“板块开发 发送邮箱验证码

C#邮箱注册