ldap如何在contacts';第二/第三个备用电子邮件地址?

ldap如何在contacts';第二/第三个备用电子邮件地址?,ldap,exchange-server,exchangewebservices,ldap-query,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即使其他两个电子邮件地址中有“jo

我有一个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人员搜索中放置的所有可能的筛选器?

Exchange不会在mail2或mail3等字段中存储其他邮件地址。所有地址都存储在多值字段“proxyAddresses”中。此字段包含每个地址的一行,格式为

地址类型:地址

例如:

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

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

所以您可以搜索(proxyAddress=%v)或类似的内容。我对LDAP搜索语法一无所知

编辑:另一个选项是使用EWS Web服务的ResolveNames操作(请参阅和)。

过滤器:

(|(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*))

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

Active Directory发布时带有一些值得怀疑的模式选择。现在很难修复它们

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

电话号码为单值时也会发生这种情况,额外的值现在溢出到属性otherPhone中

同样适用于:

  • 传真电话号码和其他传真电话号码
  • labelledUri和url
  • 家庭电话和其他家庭电话
  • 寻呼机和其他寻呼机
  • 移动和其他移动

我尝试添加
(proxyAddress=*%v*)
(proxyAddress=*%v*)
,但其他两封电子邮件仍然不会显示(它仍然不会搜索这些字段)!:(但我感谢您的帮助!:)试试(proxyAddresses=smtp:**%v*)。不幸的是,
(proxyAddresses=smtp:**%v*)
也不起作用。虽然我最终能够让它搜索第二封和第三封电子邮件((smtpemail2=*%v*)(smtpemail3=*%v*),但它仍然只返回第一封电子邮件,尽管它是通过第二封或第三封找到的!“你知道如何让它返回这三封邮件吗?”@Don Rhummy你说的“它仍然只返回第一封邮件”是什么意思。它应该返回整个条目,包括所有属性的所有值,除非您只请求特定的属性,在这种情况下,它将为您提供这些属性。有关LDAP搜索请求(包括筛选器)的讨论,请参阅本文。抱歉,我想我不清楚。“Email”、“Email1”等是这些字段的“友好名称”。在ldap查询中,ldap服务器如何称呼它并不重要,“邮件”将搜索主电子邮件地址。@DonThummy当然重要。LDAP属性有名称和别名,您必须使用服务器能够理解的名称或别名。您似乎认为LDAP过滤器有一些神奇的特性,比如名称重写。他们没有。