2009-10-22 29 views
6

Tôi đang cố gắng nhận tất cả địa chỉ email được liên kết với người dùng AD đã cho.C# - Tìm tất cả địa chỉ email cho người dùng Active Directory

Đối với người dùng Tôi có tên miền và tên đăng nhập (ví dụ: domain \ username.) Và tôi AD được lưu trữ các địa chỉ email trong:

  1. Thuộc tính đường bưu điện.
  2. Trong các thuộc tính proxyAddresses.

Cho đến nay, tôi không biết API C# sử dụng để kết nối với AD và cách lọc người dùng đúng cách để tìm nạp tất cả địa chỉ email. Tôi đang sử dụng .NET 3.5.

Cảm ơn bạn.

Trả lời

-1

Bạn đã xem lớp DirectoryEntry chưa. Bạn có thể kéo các thuộc tính từ đó do bạn đã thiết lập chuỗi LDAP. Sự thích hợp cho thư là "thư" mỉa mai aint nó?

30

Đây là giải pháp có thể sử dụng các lớp khác nhau trong không gian tên 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

Tham chiếu đến "System.DirectoryServices.AccountManagement" cũng là cần thiết để ví dụ này hoạt động. – Fueled

+4

+1 Điều này tốt hơn câu trả lời được chấp nhận vì a) bạn không phải rời khỏi trang này để được trợ giúp và b) nó không có tất cả các công cụ truy vấn LDAP khó hiểu. –

+0

Tôi sẽ trân trọng không đồng ý - trong khi điều này thêm một số sự rõ ràng, nó không chỉ ra một sự khác biệt quan trọng mà tài liệu này không chỉ ra: "tài sản [proxyAddress] này liệt kê tất cả các loại địa chỉ email, chẳng hạn như SMTP, x.400, v.v. Vì vậy, chúng tôi sẽ cần phải sửa đổi mã của chúng tôi để kiểm tra loại SMTP ". Hơn nữa, và có lẽ Microsoft là để đổ lỗi ở đây cho tài liệu không hợp lệ, @ Donut - Tôi vẫn còn tự hỏi tại sao bạn đã làm như sau: emailAddresses.Add (user.EmailAddress) khi tài liệu Microsoft xác định thuộc tính này là "danh sách địa chỉ email cho một liên hệ "(nhiều địa chỉ?) – Jordan

Các vấn đề liên quan