2009-10-22 14 views
6

特定のADユーザーに関連付けられているすべての電子メールアドレスを取得しようとしています。C# - Active Directoryユーザーのすべての電子メールアドレスを検索

  1. メール属性:私は、ドメインとログイン名(例:DOMAIN \ユーザー名)を持っていると私はADがメールアドレスを記憶しているユーザーの場合

  2. proxyAddressesの属性。

これまでのところ、私はC#のAPIは、ADに接続するために使用する、そしてどのように適切にすべての電子メールアドレスを取得するために、ユーザによってフィルタリングするのか分かりません。私は.NET 3.5を使用しています。

ありがとうございます。

答えて

-1

DirectoryEntryクラスを調べましたか。 LDAP文字列が設定されている場合、そこからプロパティを取得できます。メールのためのproperyは "メール"皮肉なことですか?

30

System.DirectoryServices名前空間でさまざまなクラスを使用すると、次のような解決策があります。

string username = "username"; 
string domain = "domain"; 

List<string> emailAddresses = new List<string>(); 

PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, domain); 
UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, username); 

// Add the "mail" entry 
emailAddresses.Add(user.EmailAddress); 

// Add the "proxyaddresses" entries. 
PropertyCollection properties = ((DirectoryEntry)user.GetUnderlyingObject()).Properties; 
foreach (object property in properties["proxyaddresses"]) 
{ 
    emailAddresses.Add(property.ToString()); 
} 
+4

この例が機能するには、「System.DirectoryServices.AccountManagement」への参照も必要です。 – Fueled

+4

+1これは、a)助けを得るためにこのサイトを離れる必要はなく、b)それはすべての潜在的なLDAPクエリのものを持っていないので、受け入れられた答えより優れています。 –

+0

私は正直言ってそれに賛成するつもりはありませんが、これは明快さを追加していますが、このドキュメントでは指摘していない重要な違いは指摘していません。 "this [proxyAddress]プロパティはSMTP、x.400などのすべての電子メールアドレスタイプをリストしますSMTPの種類を確認するためにコードを修正する必要があります。 "さらに、Microsoftは無効なドキュメントのためにここに責任を負うことになっています.Donut - 私はまだあなたが次のことをした理由を疑問に思っています。 emailAddresses.Add(user.EmailAddress) Microsoft docsがこの属性を " (複数のアドレス?) – Jordan

関連する問題