¿Desea consultar Active Directory para obtener la propiedad de correo electrónico de un nombre distinguido directamente?

Estoy haciendo algunas consultas en el directorio activo en este momento, nuestra identificación de usuario de la base de datos coincide con la de la identificación de usuario del directorio activo.

Estoy pasando la identificación de usuario junto con el dominio y la ruta para obtener lo que necesito. Mi objetivo es obtener la dirección de correo electrónico del administrador del ID de usuario pasado. Lo que devuelvo cuando obtengo la propiedad del administrador es el nombre distinguido.

Encontrar el registro del administrador de un usuario en Active Directory

Este post anterior es mi problema exacto, pero es un post antiguo y no hay más descriptivos sobre cómo avanzar y el OP supo qué hacer a continuación con el nombre distinguido. La verdad es que yo no.

Entonces, mi pregunta es, ¿cómo obtengo la propiedad de la dirección de correo electrónico del nombre distinguido que hasta ahora he almacenado como una cadena con un prefijo de LDAP: // + "MyDistinguishedName"?

 public string GetManagerEmail(string ActiveDirectoryPath, string ActiveDirectoryDomain, bool email)
    {

        DirectoryEntry entry = new DirectoryEntry(ActiveDirectoryPath);

        try
        {
            DirectorySearcher search = new DirectorySearcher(entry);

            search.Filter = "(SAMAccountName=" + workerID + ")";
            search.PropertiesToLoad.Add("cn");
            search.PropertiesToLoad.Add("givenname");  //firstname
            search.PropertiesToLoad.Add("sn");//surname
            search.PropertiesToLoad.Add("manager");
            search.PropertiesToLoad.Add("email");
            SearchResult result = search.FindOne();

            if (null == result)
            {
                return workerID;
            }
            if (email)
            {
                return (string)result.Properties["email"][0];
            }
            else
            {
                return (string)result.Properties["manager"][0];
                //return (string)result.Properties["manager"].IndexOf[];
            }
        }
        catch (Exception ex)
        {
            throw new Exception("Error. " + ex.Message);

        }
        finally
        {
            entry.Close();
        }
    }

Arriba está el método que utilizo para obtener los datos que necesito. Cualquier aportación o mejoras serían apreciadas.

Gracias

ESTA ES MI SOLUCIÓN PARA AQUELLOS QUE PUEDEN INTERESAR

            string domainAndUsername = ActiveDirectoryDomain + @"\" + workerID;
        DirectoryEntry manager = new DirectoryEntry(ActiveDirectoryPath);

        try
        {
            if (manager != null)
            {
                // get e-mail of manager 
                if (manager.Properties["mail"] != null && manager.Properties["mail"].Count > 0)
                {
                    string managersEMail = manager.Properties["mail"].Value.ToString();
                    return managersEMail;
                }
            }

            //No email available, use contract manager
            return string.Empty;

        }
        catch (Exception ex)
        {
            throw new Exception("Error. " + ex.Message);

        }
        finally
        {
            manager.Close();
        }

Respuestas a la pregunta(1)

Su respuesta a la pregunta