如何使用窗口身份验证获取电子邮件地址

时间:2009-10-28 17:05:38

标签: asp.net asp.net-mvc email windows-authentication

我正在使用ASP.net MVC框架设计一个Web应用程序。我想使用Windows身份验证并使用角色管理器SQLRoleProvider执行角色检查。

如何确定当前登录用户的电子邮件地址?这甚至可能吗?

应用程序将部署在多域Intranet中,如果这很重要(我认为它确实如此)。

感谢您的帮助!

4 个答案:

答案 0 :(得分:7)

以下是一些代码中的示例:

DirectorySearcher searcher = new DirectorySearcher();    
searcher.Filter = string.Format("sAMAccountName={0}", _name);    
SearchResult user = searcher.FindOne();    
string emailAddr = user.Properties["mail"][0].ToString();

答案 1 :(得分:2)

您可以在Active Directory中查找用户的属性。这是一篇很棒的文章,解释了如何使用System.DirectoryServices和C#:

来做到这一点

http://www.codeproject.com/Articles/6778/How-to-get-User-Data-from-the-Active-Directory

答案 2 :(得分:0)

asp.net会员服务数据库只是一个数据库,您可以直接执行查询。我不认为默认会员提供商有办法获取电子邮件地址。

答案 3 :(得分:0)

在MVC5应用程序中,给出如下所示的操作

  public ActionResult Index()
        {
            string name = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
            ViewBag.Name = name;
            ViewBag.Email = uEmail(User.Identity.Name.Replace(@"YOURDOMAIN\", ""));
            return View();
        }

YOURDOMAIN 更改为您的域名。并给出如下给出的uEmail功能。同时添加使用 System.Security.Principal 使用System.DirectoryServices 的引用。

private string uEmail(string uid)
        {
            DirectorySearcher dirSearcher = new DirectorySearcher();
            DirectoryEntry entry = new DirectoryEntry(dirSearcher.SearchRoot.Path);
            dirSearcher.Filter = "(&(objectClass=user)(objectcategory=person)(mail=" + uid + "*))";

            SearchResult srEmail = dirSearcher.FindOne();

            string propName = "mail";
            ResultPropertyValueCollection valColl = srEmail.Properties[propName];
            try
            {
                return valColl[0].ToString();
            }
            catch
            {
                return "";
            }

        }