如何使用C#或PowerShell知道用户在Exchange上是否有邮箱

时间:2018-11-05 08:56:09

标签: c# powershell exchange-server exchange-management-shell

我们开发了一个SharePoint Web部件,它通过为Office 365上具有其邮箱的用户请求Exchange OnPrem 2013或Exchange Online来显示所选用户的日历项目。我们使用的代码如下:

// Impersonate the Search
ExchangeImpersonationType exchangeImpersonationType = new ExchangeImpersonationType();

ConnectingSIDType connectingSIDType = new ConnectingSIDType();
connectingSIDType.PrimarySmtpAddress = emailAddress;
exchangeImpersonationType.ConnectingSID = connectingSIDType;
exchangeServiceBinding.ExchangeImpersonation = exchangeImpersonationType;

// Create the Request
FindItemType findItemType = new FindItemType();

// Specified Transversal
findItemType.Traversal = ItemQueryTraversalType.Shallow;

// Specified ItemShape
ItemResponseShapeType itemResponseShapeType = new ItemResponseShapeType();
itemResponseShapeType.BaseShape = DefaultShapeNamesType.AllProperties;
findItemType.ItemShape = itemResponseShapeType;

// Specified ParentFolderIds
DistinguishedFolderIdType[] distinguishedFolderIdTypes = new DistinguishedFolderIdType[1];
distinguishedFolderIdTypes[0] = new DistinguishedFolderIdType();
distinguishedFolderIdTypes[0].Id = DistinguishedFolderIdNameType.calendar;
findItemType.ParentFolderIds = distinguishedFolderIdTypes;

// Specified Item
CalendarViewType calendarViewType = new CalendarViewType();
calendarViewType.StartDate = startDate;
calendarViewType.EndDate = endDate;

findItemType.Item = calendarViewType;

// Execute the Request
FindItemResponseType res = exchangeServiceBinding.FindItem(findItemType);

问题是,当用户在Exchange OnPrem上没有邮箱时,exchangeServiceBinding.FindItem方法将在3到5秒钟后回答,错误代码为“ UserHasNoMailbox”。

想象一下,现在加载一个页面的用户超过40个,其中有10个用户在Exchange Online上拥有邮箱,在这种情况下,我们将损失至少30秒。

有没有办法知道用户是否在Exchange OnPrem上拥有邮箱而没有发出FindItem请求?

谢谢。

1 个答案:

答案 0 :(得分:0)

可能的解决方法-您可以在Active Directory中的场所邮箱中查找。这是一个电源外壳程序片段(可以轻松将其转换为C#)

$mail = "FirstName.LastName@yourorg.com"
([adsisearcher]"(&(objectCategory=person)(objectClass=organizationalPerson)(mail=$mail))").FindOne().Properties

此查找应该非常快(至少与3-5秒相比)。如果获得任何结果,则可以在本地执行“ FindItem”,如果没有,请在Exchange Online上进行检查。

如果存在所有本地电子邮件中的所有AD组或Exchange DL,则可以首先从AD中提取组成员列表(而不是多次运行查询)