Ответ 1
Поскольку вы находитесь в сети Windows, вам нужно запросить Active Directory для поиска пользователя, а затем получить его свойства, такие как адрес электронной почты
Вот пример функции DisplayUser
, которая задана IIdentity
в сети с проверкой подлинности Windows, находит пользователя email
:
public static void Main() {
DisplayUser(WindowsIdentity.GetCurrent());
Console.ReadKey();
}
public static void DisplayUser(IIdentity id) {
WindowsIdentity winId = id as WindowsIdentity;
if (id == null) {
Console.WriteLine("Identity is not a windows identity");
return;
}
string userInQuestion = winId.Name.Split('\\')[1];
string myDomain = winId.Name.Split('\\')[0]; // this is the domain that the user is in
// the account that this program runs in should be authenticated in there
DirectoryEntry entry = new DirectoryEntry("LDAP://" + myDomain);
DirectorySearcher adSearcher = new DirectorySearcher(entry);
adSearcher.SearchScope = SearchScope.Subtree;
adSearcher.Filter = "(&(objectClass=user)(samaccountname=" + userInQuestion + "))";
SearchResult userObject = adSearcher.FindOne();
if (userObject != null) {
string[] props = new string[] { "title", "mail" };
foreach (string prop in props) {
Console.WriteLine("{0} : {1}", prop, userObject.Properties[prop][0]);
}
}
}
дает следующее:
Изменить: если вы получаете "плохие ошибки пользователя/пароля", Учетная запись, в которой работает код, должна иметь доступ к домену пользователей. Если вы запускаете код в asp.net, веб-приложение должно запускаться в пуле приложений с учетными данными с доступом к домену. См. здесь для получения дополнительной информации