使用 EWS 从 outlook 获取用户时获取空集合

问题描述 投票:0回答:2

从 Outlook 中获取用户时获取空集合。也许有人熟悉这个问题。

这就是我设置交换服务的方式。这是非常标准的,并遵循了 Microsoft 中的文档:

exchangeService.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
exchangeService.Credentials = new OAuthCredentials(SMTPClientFactory.Secret());
exchangeService.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "example@com");
exchangeService.HttpHeaders.Add("X-AnchorMailbox", "example@com");

当然我用的是有共享邮箱的地址

我必须使用 EWS 从 Outlook 中获取用户,但一直走到死胡同。我尝试使用函数

var allUsers = exchangeService.ResolveName("SMTP:", ResolveNameSearchLocation.ContactsThenDirectory, true);

但是这个功能有限制,不能超过100个用户。

我也试过用这个代码

SearchFilter searchFilter = new SearchFilter.ContainsSubstring(ContactSchema.EmailAddress1, "@");
// Use a FindPeopleResults object to retrieve the contacts.
FindPeopleResults results = exchangeService.FindPeople(WellKnownFolderName.Contacts, searchFilter, new ItemView(int.MaxValue)).Result;

但这并不能获取任何东西。还尝试使用

FindItem
功能它也没有给我任何东西。

目标是使用fetch all users.

c# exchangewebservices nullreferenceexception
2个回答
0
投票
foreach (Item item in results.Items)
{
    EmailAddress user = item as EmailAddress;
    if (user != null)
    {
        NameResolutionCollection resolutions = service.ResolveName(user.Address, ResolveNameSearchLocation.DirectoryOnly, true);
        foreach (NameResolution resolution in resolutions)
        {
            Contact contact = resolution.Contact;
            if (contact != null)
            {
                Console.WriteLine(contact.DisplayName);
            }
        }
    }
}

0
投票

您在尝试使用 Exchange Web 服务 (EWS) 从 Outlook 中获取用户时似乎遇到了问题。

ResolveName 函数的局限性在于它最多只能检索 100 个用户,这可能无法满足您的需求。

关于 FindPeople 方法,问题可能出在您使用的搜索过滤器上。 ContainsSubstring 搜索过滤器用于搜索在指定属性中包含指定字符串的联系人,在本例中为 EmailAddress1。如果您要搜索的字符串不存在于任何联系人的 EmailAddress1 属性中,则结果集将为空。

您可以尝试使用不同的搜索过滤器,例如 SearchFilter.IsEqualTo,它检查指定的属性是否等于指定的值。例如:

SearchFilter searchFilter = new SearchFilter.IsEqualTo(ContactSchema.EmailAddress1, "*");
FindPeopleResults results = exchangeService.FindPeople(WellKnownFolderName.Contacts, searchFilter, new ItemView(int.MaxValue)).Result;

此搜索过滤器将检索在其 EmailAddress1 属性中具有值的所有联系人。请注意,ItemView 参数用于指定要在结果集中返回的最大项目数。通过将其设置为 int.MaxValue,您要求返回所有项目。

如果这不能解决问题,您可能需要检查您正在模拟的用户是否具有访问共享邮箱中联系人的必要权限。问题也可能出在所使用的凭据上。确保凭据正确并具有必要的权限。

© www.soinside.com 2019 - 2024. All rights reserved.