ldap如何在联系人的第二/第三个备用电子邮件地址中搜索电子邮件地址?

时间:2011-08-09 19:23:47

标签: ldap exchange-server exchangewebservices ldap-query

我有一个带有我的电子邮件联系人的LDAP服务器,以便我可以通过姓名/电子邮件等查找联系人。但是,它似乎只搜索并找到任何联系人的第一个电子邮件地址。

例如,如果我有一个人:

LastName: Doe
FirstName: John
Email: jdoe@work.com
Email2: johndoe@home.com
Email3: johndoe@fun.com

它只搜索或返回第一封电子邮件。例如,如果我搜索“John”,它将仅返回“jdoe@work.com”,即使其他两个电子邮件地址中包含“john”。我尝试过的搜索过滤器是:

//This one will both look through and match the first email but ignores the 2nd/3rd
(|(displayName=*%v*)(mail=*%v*)(uid=*%v*)(givenname=*%v*)(sn=*%v*)(cn=*%v*))

//This one throws an error saying "mail2" and "mail3" are invalid filters.
(|(displayName=*%v*)(mail=*%v*)(mail2=*%v*)(mail3=*%v*)(uid=*%v*)(givenname=*%v*)(sn=*%v*)(cn=*%v*))

我应该使用什么?

此外,是否有人链接到某个页面,其中列出了我可以在ldap人员搜索中添加的所有可能的过滤器?

3 个答案:

答案 0 :(得分:1)

过滤器:

(|(displayName=*%v*)(mail=*%v*)(uid=*%v*)(givenname=*%v*)(sn=*%v*)(cn=*%v*))

与条目不匹配:

LastName: Doe
FirstName: John
Email: jdoe@work.com
Email2: johndoe@home.com
Email3: johndoe@fun.com

因为没有任何过滤器断言与给定条目中的任何属性名称匹配。

(|(Email=jd*)(Email2=john*)(Email3=john*)(lastName=Do*))

会匹配。您是否考虑过使用您提供的示例条目的标准名称?

答案 1 :(得分:0)

Exchange不会在mail2或mail3等字段中存储其他mailaddresses。所有地址都存储在多值字段“proxyAddresses”中。该字段以

的形式为每个地址包含一行

地址类型:地址

示例:

SMTP:test@contoso.local SMTP:user@contoso.local

示例中的第二个条目是该帐户的主要地址,因为SMTP前缀全部为大写。

所以你会搜索(proxyAddress = %v )或类似的东西。我不知道我的LDAP搜索语法。

修改:另一个选项是使用EWS网络服务的ResolveNames操作(请参阅http://www.infinitec.de/post/2009/04/13/Resolving-the-primary-email-address-with-Exchange-WebServices-ResolveNames-operation.aspxhttp://msdn.microsoft.com/en-us/library/aa563518(v=exchg.140).aspx)。

答案 2 :(得分:0)

发布了Active Directory,其中包含一些有问题的架构选择。现在很难修复它们。

其中一个是邮件被标记为单值。这应该是一个多值属性。因此使用proxyAddresses,它尝试通过使用smtp:或x500:或SIP来重载具有更多信息的字符串语法属性:以指示地址的协议。然后大写(SMTP)表示主要和小写(smtp)表示次要。

对于单值的telephoneNumber也会出现这种情况,现在额外的值会溢出到属性otherPhone中。

同样的:

  • facsimileTelephoneNumber and otherFacsimileTelephoneNumber
  • labelledUri和url
  • homePhone和其他HomePhone
  • pager和otherPager
  • mobile and otherMobile