0

我们开发了一个 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请求?

谢谢。

4

1 回答 1

0

可能的解决方法 - 您可以在 Active Directory 中查找本地邮箱。这是一个强大的 shell 片段(可以轻松地将其转换为 C#)

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

这种查找应该很快(至少与 3-5 秒相比)。如果您得到任何结果,您可以在本地执行“查找项目”,如果没有,请在 Exchange Online 上进行检查。

如果有一个 AD 组或 Exchange DL,所有这些本地电子邮件都是其成员,您可以先从 AD 中提取组成员列表(而不是多次运行上述查询)

于 2018-11-05T22:26:26.957 回答