Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

280
Views
Obtenga direcciones de correo electrónico de la lista de distribución usando C#

¿Cuál es la mejor manera de obtener todas las direcciones de correo electrónico individuales que componen una lista de distribución de intercambio?

Por ejemplo: tengo esta lista de distribución llamada abc@domainname.com que tiene direcciones de correo electrónico:

  1. a@domainname.com
  2. b@domainname.com
  3. c@domainname.com

Ahora necesito obtener estas direcciones usando el código C# .

Encontré una solución usando LDAP, pero sentí que sería una molestia descubrir la ruta LDAP a mi Active Directory.

 // How do I get this LDAP Path, username and password? // Is the username and password service account credentials of the app? // And do they need to be registered in AD? var entry = new DirectoryEntry("LDAP Path");//, username, password);

ACTUALIZACIÓN : para mí, la forma LDAP solo funcionó para encontrar direcciones de correo electrónico dentro de grupos de AD, por ejemplo: grupo ITSolutionDeliveryDevelopers con nombre. NO dentro de las listas de distribución de Exchange, por ejemplo: named abc@domainname.com .

 // I was able to figure out entry as suggested by @Gabriel Luci and all of the following possible formats worked for me: // ngroupnet.com is my company domain name. var entry = new DirectoryEntry(); var entry = new DirectoryEntry("LDAP://ngroupnet.com"); var entry = new DirectoryEntry("LDAP://ngroupnet.com", "MyAccountUsername", "MyAccountPassword"); var entry = new DirectoryEntry("LDAP://ngroupnet.com", "MyName@mycompany.com", "MyEmailAccountPassword");

Modo LDAP:

 public static List<string> GetDistributionListMembers(string dlName = "abc@domainname.com") { var result = new List<string>(); try { // How do I get this LDAP Path? var entry = new DirectoryEntry("LDAP Path");//, username, password); var search = new DirectorySearcher(entry); search.Filter = $"CN={dlName}"; int i = search.Filter.Length; string str = "", str1 = ""; foreach (SearchResult AdObj in search.FindAll()) { foreach (String objName in AdObj.GetDirectoryEntry().Properties["member"]) { str += Convert.ToString(objName) + "&lt;Br>"; int selIndex = objName.IndexOf("CN=") + 3; int selEnd = objName.IndexOf(",OU") - 3; str1 += objName.Substring(selIndex, selEnd).Replace("\\", ""); DirectorySearcher dsSearch = new DirectorySearcher(entry); dsSearch.Filter = "CN=" + objName.Substring(selIndex, selEnd).Replace("\\", ""); foreach (SearchResult rs in dsSearch.FindAll()) { //str1 += "&lt;p align='right'><font face='calibri' color='#2266aa' size=2>" + Convert.ToString(rs.GetDirectoryEntry().Properties["mail"].Value) + "|" + Convert.ToString(rs.GetDirectoryEntry().Properties["displayName"].Value) + "|" + Convert.ToString(rs.GetDirectoryEntry().Properties["sAMAccountName"].Value) + "|" + Convert.ToString(rs.GetDirectoryEntry().Properties["department"].Value) + "|" + Convert.ToString(rs.GetDirectoryEntry().Properties["memberOf"].Value) + "&lt;/font></p>"; str1 = Convert.ToString(rs.GetDirectoryEntry().Properties["mail"].Value); result.Add(str1); } } } return result; } catch (Exception ex) { //Do some logging or what have you. throw; } }

Así que me fui con la ruta EWS.

Modo EWS:

 public static static List<string> GetDistributionListMembers(string dlName = "abc@domainname.com") { try { var service = new ExchangeService(); var cred = new WebCredentials("sharedmailbox@domain.com", "some_password"); service.Credentials = cred; service.Url = new Uri("https://outlook.office365.com/ews/exchange.asmx"); service.TraceEnabled = true; service.TraceFlags = TraceFlags.All; var expandedEmailAddresses = new List<string>(); ExpandGroupResults myGroupMembers = service.ExpandGroup(dlName); foreach (EmailAddress address in myGroupMembers.Members) { expandedEmailAddresses.Add(address.Address); } return expandedEmailAddresses; } catch (Exception ex) { // The DL doesn't have any members. Handle it how you want. // Handle/ Log other errors. } }

¿Es el enfoque de EWS una buena manera?

Si es así, entonces estoy bien. Si no, tendré que averiguar esa ruta LDAP.

O si hay una mejor manera, por favor hágamelo saber.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Si la computadora desde la que ejecuta esto está unida al mismo dominio que el grupo que está buscando, entonces no necesita averiguar la ruta LDAP. Solo puedes hacer:

 var search = new DirectorySearcher();

Si su computadora no está unida al mismo dominio, simplemente use el nombre de dominio:

 var entry = new DirectoryEntry("LDAP://domainname.com");

Esto requiere que no haya un firewall que bloquee el puerto 389 entre su computadora y los controladores de dominio. Si necesita pasar credenciales, hágalo:

 var entry = new DirectoryEntry("LDAP://domainname.com", username, password);

Las credenciales pueden ser cualquier usuario del dominio.

Dicho esto, hay muchas ineficiencias en su código que harán que se ejecute mucho más lento de lo necesario. Escribí un artículo sobre esto que puede ayudarlo a actualizar su código: Directorio activo: mejor rendimiento

¿Es el enfoque de EWS una buena manera?

Si funciona, funciona. No soy un experto en EWS (aunque lo he usado), pero estoy bastante seguro de que está usando la autenticación básica, que se desactivará en octubre .

over 4 years ago · Santiago Trujillo Report

0

Si todos los buzones están en Office365, le sugiero que use Graph API en su lugar, por ejemplo, https://docs.microsoft.com/en-us/graph/api/group-list-members?view=graph-rest-1.0&tabs =http . Hay varias ventajas en términos de seguridad, por ejemplo, puede usar los permisos de la aplicación y todo lo que necesita es acceder al directorio, mientras que si hiciera lo mismo en EWS, requeriría acceso completo a al menos un buzón.

LDAP tendrá el mejor rendimiento de los 3 si la máxima velocidad es lo único importante.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!