如何使用DirectoryServices查找类似的电子邮件(如/包含搜索)?

时间:2017-10-05 16:42:24

标签: c# .net directoryservices

我正在寻找一种通过.NET中的DirectoryServices查找包含模式的电子邮件的方法。

        const ContextType contextType = ContextType.Domain;
        var principalContext = new PrincipalContext(contextType);
        var userPrincipal = new UserPrincipal(principalContext)
        {
             EmailAddress = "michelle*",
        };

        foreach (var principal in principalSearcher.FindAll().Cast<UserPrincipal>())
        {
            Console.WriteLine(principal.EmailAddress);
        }

如果我用EmailAddress = "*michelle*"更改上面的代码,它将无效,所以我觉得我只能执行“以”开头的搜索方式(这不是我想的那么糟糕......)。我仍然希望有一些“喜欢”或“包含模式”搜索,这可能吗?如果是这样,怎么样?

根据:https://msdn.microsoft.com/en-us/library/aa746475(v=vs.85).aspx

  

在公共名称的某处获取包含“bob”的条目:
  (cn=*bob*)

我原本预计该模式也可以用于电子邮件,是不是真的如此?

[编辑] 我想尽可能多地利用过滤系统,以避免接收到过多需要过滤的用户。

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式作为以下代码:

static void Main(string[] args)
    {

        var myList = new List<string>
        {
            "a2michelle",
            "michelle",
            "michelle3f",
            "xxmichellezz",
            "noMatching",
        };
        string pattern = @"\S*michelle\S*";
        System.Text.RegularExpressions.Regex regx = new System.Text.RegularExpressions.Regex(pattern);

        var matchedList = myList.Where(m => regx.IsMatch(m)).ToList();
        foreach(var match in matchedList)
        {
            Console.WriteLine(match);
        }
        // end of main method
    }

输出是:

a2michelle
米歇尔
michelle3f
xxmichellezz