Cómo crear a un destinatario con buzón habilitado mediante Visual C#

Resumen

En este artículo paso a paso se describe cómo crear un usuario con buzón habilitado con el espacio de nombres System.DirectoryServices y CDO para Exchange Management (CDOEXM).

Requisitos

La lista siguiente describe el hardware, software, infraestructura de red y service packs recomendados que necesita:
  • Un dominio basado en Microsoft Windows 2000 que tiene instalado Microsoft Exchange 2000
  • Microsoft Visual C# 2005 o Microsoft Visual C# .NET
  • Herramientas de administración de sistema de Microsoft Exchange 2000 en el equipo donde se ejecuta este código

Más información

Crear un nuevo programa de C#

  1. En Visual C# 2005 o en Visual .NET C#, cree un nuevo C# programa de consola que se denomina MBTest.
  2. En el Explorador de soluciones, haga clic en
    Referenciasy, a continuación, haga clic en Agregar referencia.
  3. En la ficha . NET , agregue una referencia de proyecto al espacio de nombres System.DirectoryServices .
  4. En la ficha COM , agregue una referencia a
    Microsoft CDO para administración de Exchange.
  5. Reemplace el código en el archivo Class1.cs con el código siguiente.

    Nota: En Visual C# 2005, reemplace el código en el archivo Program.cs en su lugar.
    using System;using CDOEXM;
    using System.DirectoryServices;

    namespace MBTest
    {
    class Class1
    {
    [STAThread]
    static void Main(string[] args)
    {
    //TODO: Change these items to values for your domain or organization.
    string defaultNC = "DC=yourdomain,DC=com";
    string alias = "jsmith";
    string fullName = "Joseph Smith";
    string password = "TestMb123.";
    string domainName = "yourdomain.com";
    string homeMDB = "CN=Mailbox Store (Your Server),CN=Your Storage Group,"
    + "CN=InformationStore,CN=Your Server,CN=Servers,"
    + "CN=Your Administrative Group,CN=Administrative Groups,"
    + "CN=Your Org,CN=Microsoft Exchange,CN=Services,"
    + "CN=Configuration,DC=Yourdomain,DC=Com";

    DirectoryEntry container, user;
    CDOEXM.IMailboxStore mailbox;

    //This creates the new user in the "users" container.
    //Set the sAMAccountName and the password
    container = new DirectoryEntry("LDAP://cn=users," + defaultNC);
    user = container.Children.Add("cn=" + fullName, "user");
    user.Properties["sAMAccountName"].Add(alias);
    user.CommitChanges();
    user.Invoke("SetPassword", new object[]{password});

    //This enables the new user.
    user.Properties["userAccountControl"].Value = 0x200; //ADS_UF_NORMAL_ACCOUNT
    user.CommitChanges();

    //Obtain the IMailboxStore interface, create the mailbox, and commit the changes.
    mailbox = (IMailboxStore)user.NativeObject;
    mailbox.CreateMailbox(homeMDB);
    user.CommitChanges();

    return;
    }
    }
    }

  6. Cambiar las variables en la sección TODO en la función Main para que contienen los valores correctos para su dominio.
  7. Compilar el proyecto y, a continuación, ejecute el programa.
  8. Confirme que se ha creado la nueva cuenta en el dominio al iniciar el complemento Usuarios y equipos de usuarios de Active Directory en Microsoft Management Console (MMC). Verá el nuevo usuario en el contenedor usuarios. Para comprobar que este usuario tiene un buzón habilitado, ver propiedades y observe que aparecen las fichas de Exchange y que aparece un almacén de buzón para el usuario en la ficha Opciones generales de Exchange del usuario.

Descripción del código

Crear un nuevo DirectoryEntry

Este código muestra cómo enlazar a un contenedor (en este caso, el contenedor usuarios) y cómo crear un nuevo usuario en el contenedor. No olvide el "cn =" entrada para el nombre del nuevo usuario.
container = new DirectoryEntry("LDAP://cn=users," + defaultNC);user = container.Children.Add("cn=" + fullName, "user");

Establecer las propiedades del nuevo usuario

  1. Asignar un valor de sAMAccountName. Se trata de un atributo obligatorio. No se crea la cuenta de usuario si no se especifica un valor.
  2. Ya ha proporcionado los atributos obligatorios, llamar a CommitChanges para guardar el nuevo usuario en el directorio.
  3. Llame a IADs::SetPassword para establecer la contraseña. Debe hacerlo después de llamar a CommitChanges.
  4. Permitir que el usuario modificando el atributo userAccountControl .
    user.Properties["sAMAccountName"].Add(alias);user.CommitChanges();
    user.Invoke("SetPassword", new object[]{password});

    //This enables the new user:
    user.Properties["userAccountControl"].Value = 0x200; //ADS_UF_NORMAL_ACCOUNT
    user.CommitChanges();

Crear un nuevo buzón

  1. Para obtener la interfaz IMailboxStore , convierta DirectoryEntry.NativeObject a este tipo. Esta conversión no se realiza correctamente en tiempo de ejecución si CDOEXM no está instalado en un equipo.
  2. Llame al método CreateMailbox y pase un nombre completo válido para un almacén de buzones en la organización de Exchange.
  3. Llamar a CommitChanges en DirectoryEntry para guardar el nuevo buzón.
    //Obtain the IMailboxStore interface, create the mailbox, and commit the changes.mailbox = (IMailboxStore)user.NativeObject;
    mailbox.CreateMailbox(homeMDB);
    user.CommitChanges();

Solución de problemas

  • Debe tener los permisos adecuados en el dominio para crear un usuario y un buzón. Normalmente, para crear usuarios habilitados para buzón en un dominio basado en Windows 2000, debe ser miembro del grupo Administradores de dominio de Windows 2000 para el dominio.
  • Si este código se ejecuta en un equipo que no sea un equipo basado en Exchange 2000 Server, debe tener las herramientas de administración de sistema de Exchange 2000 instalado en el equipo. Si no lo hace, CDOEXM no está disponible y la conversión a la interfaz IMailboxStore produce una respuesta InvalidCastException:
    Se ha producido una excepción no controlada del tipo 'System.InvalidCastException' en MBTest.exe
    Información adicional: especificar la conversión no es válida.
  • Si recibe un mensaje de error en la llamada a IMailboxStore.CreateMailbox, compruebe que el parámetro que pasa a este método es un almacén de buzón válido en su organización. Si no es así, recibirá un mensaje de error similar al siguiente:
    Se ha producido una excepción no controlada del tipo 'System.Runtime.InteropServices.COMException' en MBTest.exe
    Información adicional: no hay ningún objeto en el servidor.

Referencias

Para obtener más información sobre el espacio de nombres System.DirectoryServices , visite el siguiente sitio Web de Microsoft Developer Network (MSDN):Para obtener más información acerca de CDOEXM, visite el siguiente sitio Web de MSDN:
Propiedades

Id. de artículo: 313114 - Última revisión: 22 ene. 2017 - Revisión: 1

Comentarios