使用 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_DELEGATES
和 PR_EMS_AB_PUBLIC_DELEGATES_BL
列表,您可以将它们打开为 IMAPITable
。您可以在OutlookSpy 中查看数据 - 单击 IMAPISession 按钮,QueryIdentity,转到 PR_EMS_AB_PUBLIC_DELEGATES 选项卡。
如果原始扩展不是一个选项,您可以使用Redemption 及其RDOAddressEntry.Delegates
和IsDelegateFor
属性。 RDOAddressEntry
可以从 RDOSession.CurrentUser
属性中检索到。
【讨论】:
以上是关于使用 C# 获取共享邮箱的用户的主要内容,如果未能解决你的问题,请参考以下文章
C# 如何从 Outlook 的共享邮箱发送邮件并将其保存在已发送文件夹中