[转]如何使用 Visual C# 创建一个启用了邮箱的收件人

http://support.microsoft.com/kb/313114/zh-cn#appliesto

文章编号: 313114 - 最后修改: 2007年5月18日 - 修订: 5.3

如何使用 Visual C# 创建一个启用了邮箱的收件人

本页

概要
本文分步介绍了如何使用 System.DirectoryServices 命名空间和 CDO for Exchange Management (CDOEXM)...

本文分步介绍了如何使用 System.DirectoryServices 命名空间和 CDO for Exchange Management (CDOEXM) 创建一个启用了邮箱的用户。

要求

下面列出了推荐使用的硬件、软件、网络基础设施以及所需的 Service Pack:
  • 安装了 Microsoft Exchange 2000 的基于 Microsoft Windows 2000 的域
  • Microsoft Visual C# 2005 或 Microsoft Visual C# .NET
  • 运行此代码的计算机上有 Microsoft Exchange 2000 系统管理工具

更多信息
创建一个新的 C# 程序 在 Visual C# 2005 或 Visual C# .NET 中,创建一个新的名为 MBTest 的 C# 控制台程序。 在解决...

创建一个新的 C# 程序

  1. 在 Visual C# 2005 或 Visual C# .NET 中,创建一个新的名为 MBTest 的 C# 控制台程序。
  2. 在解决方案资源管理器中,右键单击“引用”,然后单击“添加引用”。
  3. 在“.NET”选项卡上,添加一个对 System.DirectoryServices 命名空间的项目引用。
  4. 在“COM”选项卡上,添加一个到“Microsoft CDO for Exchange Management”的引用。
  5. 将 Class1.cs 文件中的代码替换为下面的代码。

    注意:在 Visual C# 2005 中,应替换 Program.cs 文件中的代码。
    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. 更改 Main 函数的 TODO 部分中的变量,使它们包含用于您的域的正确值。
  7. 编译此项目,然后运行该程序。
  8. 启动 Microsoft 管理控制台 (MMC) 中的“Active Directory 用户和计算机”管理单元,确认是否已在域中创建了新帐户。您会在“用户”容器中看到此新用户。要检查此用户是否启用了邮箱,请查看该用户的属性中是否显示了“Exchange”选项卡,以及“Exchange 常规”选项卡上是否为该用户列出了一个邮箱存储。

代码说明

创建一个新的 DirectoryEntry

此代码演示了如何绑定到容器(在本例中为“用户”容器),以及如何在该容器中创建一个新用户。不要忘记表示新用户名的“cn=”项。
container = new DirectoryEntry("LDAP://cn=users," + defaultNC);
user = container.Children.Add("cn=" + fullName, "user");
				

为新用户设置属性

  1. sAMAccountName 赋一个值。这是一个必需的属性。如果未指定值,则不会创建用户帐户。
  2. 因为您已提供了必需属性,所以要调用 CommitChanges 将新用户保存到目录中。
  3. 调用 IADs::SetPassword 以设置密码。调用 CommitChanges 之后必须进行此操作。
  4. 通过修改 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();
    				

创建一个新的邮箱

  1. 要获取 IMailboxStore 接口,请将 DirectoryEntry.NativeObject 转换为此类型。如果计算机上没有安装 CDOEXM,此转换在运行时将不会成功。
  2. 调用 CreateMailbox 方法,并将一个有效的可分辨名称传递给您的 Exchange 组织中的一个邮箱存储。
  3. 调用 DirectoryEntry 上的 CommitChanges 以保存此新邮箱。
    //Obtain the IMailboxStore interface, create the mailbox, and commit the changes.
    mailbox = (IMailboxStore)user.NativeObject;
    mailbox.CreateMailbox(homeMDB);
    user.CommitChanges();
    				

疑难解答

  • 您必须在域中有适当的权限才能创建用户和邮箱。通常情况下,要在一个基于 Windows 2000 的域中创建一个启用了邮箱的用户,您必须是该域的 Windows 2000 域管理员组成员。
  • 如果运行此代码的计算机不是基于 Exchange 2000 Server 的,您必须在该计算机上安装 Exchange 2000 系统管理工具。如果不这样做,CDOEXM 将不可用,而且向 IMailboxStore 接口的转换将引发 InvalidCastException 响应:
    未处理的“System.InvalidCastException”类型的异常出现在 MBTest.exe 中
    其他信息:指定的转换无效。
  • 如果您调用 IMailboxStore.CreateMailbox 时收到一条错误消息,请验证您传递给此方法的参数是否为您的组织中一个有效的邮箱存储。如果不是,您将收到类似以下内容的错误消息:
    未处理的“System.Runtime.InteropServices.COMException”类型的异常出现在 MBTest.exe 中
    其他信息:在服务器上没有这样一个对象。

参考
有关 System.DirectoryServices 命名空间的更多信息,请访问下面的 Microsoft Developer Network (MSDN)...

有关 System.DirectoryServices 命名空间的更多信息,请访问下面的 Microsoft Developer Network (MSDN) 网站:
http://msdn2.microsoft.com/en-us/library/system.directoryservices(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.directoryservices(vs.71).aspx)
有关 CDOEXM 的更多信息,请访问下面的 MSDN 网站:
http://msdn2.microsoft.com/en-us/library/ms876280.aspx (http://msdn2.microsoft.com/en-us/library/ms876280.aspx)

这篇文章中的信息适用于:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 标准版
  • Microsoft Collaboration Data Objects for Exchange Management 1.1
  • Microsoft Exchange 2000 Server 标准版
  • Microsoft Exchange 2000 Enterprise Server
  • Microsoft Active Directory Client Extension
  • Microsoft Active Directory Service Interfaces 2.5
关键字: 
kbhowtomaster kbdswadsi2003swept KB313114
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
原文地址:https://www.cnblogs.com/LeoWong/p/1594179.html