【问题标题】:How do ldap search for email address in contacts' 2nd/3rd alternate email addresses?ldap 如何在联系人的第二/第三个备用电子邮件地址中搜索电子邮件地址?
【发布时间】:2011-08-09 19:23:46
【问题描述】:

我有一个包含我的电子邮件联系人的 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 人员搜索中放入的所有可能的过滤器?

【问题讨论】:

  • 请参阅此article,了解有关 LDAP 搜索请求(包括过滤器)的讨论。

标签: ldap exchange-server exchangewebservices ldap-query


【解决方案1】:

Exchange 不会在 mail2 或 mail3 等字段中存储其他邮件地址。所有地址都存储在多值字段“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)。

【讨论】:

  • 我尝试添加 (proxyAddress=*%v*)(proxyAddresses=*%v*) 并且其他两封电子邮件仍然不会出现(它仍然不会搜索这些字段)! :(但我感谢您的帮助!:)
  • 试试(proxyAddresses=smtp:*%v*)。
  • 很遗憾,(proxyAddresses=smtp:*%v*) 也不起作用。
  • 虽然我终于能够让它搜索第二和第三封电子邮件 ((smtpemail2=*%v*)(smtpemail3=*%v*)) 它仍然只返回第一封电子邮件,尽管通过第二个或第三个找到它!知道如何让它返回所有三个吗?
  • @Don Rhummy “它仍然只返回第一封电子邮件”是什么意思。它应该返回整个条目,包括所有属性的所有值,除非您只请求特定属性,在这种情况下它会为您提供这些。
【解决方案2】:

过滤器:

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

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

【讨论】:

  • 对不起,我想我不清楚。 “Email”、“Email1”等是这些字段的“友好名称”。在 ldap 查询中,无论 ldap 服务器如何称呼它,“mail”都会搜索主电子邮件地址。
  • @DonThummy 当然很重要。 LDAP 属性具有名称和别名,您必须使用服务器能够理解的名称或别名。您似乎认为 LDAP 过滤器具有一些神奇的属性,例如名称重写。他们没有。
【解决方案3】:

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

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

这也发生在 phoneNumber 为单值时,额外的值现在溢出到属性 otherPhone 中。

同样适用于:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2012-08-15
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多