了解 Exchange Server 2003 与非 Exchange 邮件系统之间的互操作性

 

上一次修改主题: 2006-07-27

Microsoft 提供了以下几个组件,可用于将 Exchange 2003 集成到非 Exchange 邮件基础结构中,以及将用户迁移到 Exchange 2003 中:

  • SMTP 连接器和 X.400 连接器 为了实现无缝互操作性,必须部署可靠的双向邮件传输路径。所有现代邮件系统都支持 SMTP,因此,可以使用 SMTP 连接器连接系统。或者,如果旧版邮件系统依赖 X.400,则可以使用 X.400 连接器。此邮件连接性可能是临时的(例如,仅当将用户从旧版系统迁移到 Exchange Server 2003 时,各个系统才可能需要共存)。其他情况下,可能需要长期共存(例如,部门所使用的不会移动到 Exchange Server 2003 的邮件系统可能需要永久连接)。
  • Active Directory 工具和应用程序编程接口 必须将 Active Directory® 目录服务与旧版邮件系统的目录同步,才能跨两个邮件系统建立一致的全局地址列表。但是,SMTP 连接器和 X.400 连接器都不支持自动目录同步。在了解 Exchange Server 2003 中的互操作性和迁移中指出,可以使用 Active Directory 工具(如 Ldifde.exe 和 Csvde.exe)执行手动目录同步或批量导出和导入操作。使用 Microsoft Visual Basic® Scripting Edition (VBScript) 基本编程技巧,也许还可以基于 Active Directory 服务接口 (ADSI) 和 Exchange Management 协作数据对象 (CDOEXM),实现更复杂、半自动的目录同步解决方案。有关 ADSI 和 CDOEXM 的详细信息,请参阅“Exchange 软件开发工具包 (SDK)”(https://go.microsoft.com/fwlink/?LinkId=25925)。
  • 用于访问忙/闲信息的 Exchange Server 编程接口 跨平台访问忙/闲信息,对于跨不同的邮件系统安排会议非常有用。不过,通过 Lotus Notes 连接器或 Novell GroupWise 连接器连接到 Exchange 2003 组织时,日历连接器不适用于除 Lotus Notes 或 Novell GroupWise 之外的非 Exchange 邮件系统。虽然不能在通过 SMTP 连接器或 X.400 连接器彼此连接的系统之间同步忙/闲信息,但是,可以使用 Outlook 在共享位置发布忙/闲信息,或使用 Exchange 协作数据对象 (CDOEX) 来实现可在 ASP.NET 页上显示 Exchange 2003 用户忙/闲状态的自定义解决方案。有关 CDOEX 的详细信息,请参阅 Exchange SDK (https://go.microsoft.com/fwlink/?LinkId=25925)。
  • Exchange 迁移向导 Exchange 迁移向导是一种工具,可用于将用户从支持的邮件系统(如 Microsoft Mail for PC Networks、Microsoft Mail for AppleTalk Networks 或 Lotus cc:Mail)迁移到 Exchange 2003。Exchange 迁移向导还支持 LDAP 和 IMAP4,如果必须从 HP OpenMail、Sun ONE(以前称为 Netscape iPlanet)、Openwave Email Mx、Alt-n MDaemon 或其他任何支持 LDAP 和 IMAP4 的电子邮件系统迁移,则这非常有用。Exchange 迁移向导支持通过复制现有目录信息、邮箱和邮件并将该信息导入 Exchange Server 2003 进行迁移,这在了解 Exchange Server 2003 中的互操作性和迁移中进行了说明。
  • 独立源提取程序 Exchange 迁移向导不直接支持旧版邮件系统,如 Dec All-in-One、Verimation MEMO 或 IBM 专业办公系统 (PROFS) 和 OfficeVision/VM。但是,有一些独立源提取程序(Microsoft 和非 Microsoft 供应商均可提供)可用于将旧版邮件系统邮箱中的现有数据提取到迁移文件内,供 Exchange 迁移向导导入至 Exchange Server 2003 中。若要获取旧版邮件系统的独立源提取程序,请与 Microsoft 产品支持服务联系。有关产品支持服务(包括如何与之联系)的信息,请转到 https://support.microsoft.com

邮件传输和转换

Exchange Server 2003 支持两种通用的邮件标准,可连接到任何类型的邮件系统:SMTP 和 X.400。SMTP 是 Exchange 2003 的本地邮件传输协议,因此,建议您在 SMTP 和 X.400 中优先选择 SMTP。而且,与 X.400 连接器相比,配置 SMTP 连接器更简单。但是,如果工作环境依赖 X.400 主干或者不支持 SMTP(如果未在旧式基础结构中部署其他组件),则 X.400 是很好的选择。

基于 SMTP 的邮件传输

Exchange Server 2003 依赖 Windows 2003 SMTP 服务(使用 Exchange 特定的传输组件和模块进行扩展),与远程 SMTP 主机进行通信。SMTP 服务在 Exchange 2003 中由虚拟服务器表示。要让邮件传输正常工作,SMTP 虚拟服务器必须能将 SMTP 域名解析为 IP 地址。通常,此操作通过域名系统 (DNS) 查询来完成。SMTP 主机必须在邮件交换器 (MX) 记录中进行注册。还可以将所有 SMTP 出站邮件转发到单个 SMTP 主机,以进行其他传递。此 SMTP 主机称为智能主机。Internet 服务提供商 (ISP) 通常为其客户提供中央智能主机,用来通过 Internet 处理邮件传输。

通过专用 SMTP 连接器,能够最好地完成 SMTP 邮件到内部 SMTP 主机的传输,因为与 SMTP 虚拟服务器相比,SMTP 连接器可以更好地控制配置。连接器的设置比虚拟服务器设置具有更高的邮件传输优先权。例如,可以使用 SMTP 连接器实现中心邮件桥头服务器,该服务器负责旧版邮件系统与 Exchange 2003 组织之间的所有邮件传输。图 1 用单个桥头服务器说明了此类环境。为了实现容错和负载平衡,可以在 SMTP 连接器配置中定义多个桥头服务器。

770bceeb-b498-4834-88a6-722a4bbf6faf

配置 SMTP 连接器时,可以指定是使用 DNS 和 MX 记录进行邮件传输,还是将所有邮件转发到智能主机。将邮件传输到内部网络中的其他 SMTP 主机时,使用智能主机通常是更好的选择,因为内部目标在 DNS 中通常不会注册为 MX 记录。若要通过 SMTP 连接器转发特定 SMTP 域的邮件,必须将该连接器标识为负责该域的连接器。可以在目标系统的 SMTP 域名所对应的连接器配置中定义 SMTP 类型的地址空间,从而完成此操作。在图 1 中,此地址空间为:SMTP:legacy.contoso.com。由于目标系统通过 SMTP 域名进行标识,因此,旧版邮件系统和 Exchange 2003 组织无法共享同一个 SMTP 域名。有关在迁移方案中如何处理 SMTP 域名的详细信息,请参阅了解 Exchange Server 2003 中的互操作性和迁移

note注意:
如果收件人地址与任何连接器地址空间都不匹配,则会使用本地 SMTP 虚拟服务器设置进行邮件传递。默认情况下,Exchange 2003 会尝试使用 DNS 查找远程 SMTP 主机,直到您更改 SMTP 虚拟服务器的传递选项为止。

Exchange 到 SMTP 的邮件传输

图 2 显示了通过 SMTP 连接器将邮件从 Exchange 2003 发送到非 Exchange 邮件系统的过程。

c4189d81-f680-4286-8bc2-3df2216f8972

通过 SMTP 将邮件从 Exchange 2003 传输到非 Exchange 邮件系统的过程如下:

  1. 发送到本地或远程用户的所有邮件,必须通过 Exchange 2003 传输引擎进行传递。预提交队列是进入高级排队引擎的入口点。

  2. 高级排队引擎可将邮件从预提交队列传输到预分类队列,以便分类程序对其进行处理。分类程序根据 Active Directory 检查限制、应用针对发件人和针对收件人的限制并解析收件人信息,以确定邮件发送至本地收件人还是远程收件人。然后,分类程序会将邮件放在分类后队列中,以将其返回到高级排队引擎。

    note注意:
    分类程序将展开通讯组列表,解析收件人名称和发件人名称,确定主服务器,确定邮件必须转换成何种格式,然后对邮件进行分流。分流是创建多个邮件副本的过程,例如,收件人需要不同的邮件格式时,就必须进行分流。
  3. 高级排队引擎会将非本地收件人的邮件从分类后队列中传输到预路由队列,并调用路由引擎。路由引擎可在链接状态表中维护下一个跃点信息。根据用户的目标地址,路由引擎可确定收件人是非 Exchange 邮件系统上的用户,然后将邮件移动到 SMTP 连接器的链接队列中。队列管理器组件可管理链接队列。队列的名称与远程传递目标匹配。

  4. SMTP 协议服务可拾取邮件,根据 SMTP 连接器配置或基于收件人的 SMTP 域进行 DNS 查询来确定目标主机,在 TCP 端口 25 上建立目标主机的 TCP/IP 连接,然后传输邮件。

  5. 目标主机可将邮件传递到其最终目标。

SMTP 到 Exchange 的邮件传输

SMTP 连接器仅用于从 Exchange 2003 中传输出站邮件。SMTP 连接器是配置对象,包含用于确定 SMTP 服务如何建立连接以及如何传输邮件的参数。但是,非 Exchange 邮件系统不会识别这些对象和参数。远程 SMTP 主机只是通过 TCP 端口 25 在 Exchange 2003 服务器上建立 SMTP 服务的 TCP/IP 连接,然后传输其邮件。

图 3 显示了从远程 SMTP 主机接收邮件的过程。

ae35f059-ce1c-49be-8c0f-94c125db4af0

将邮件从远程 SMTP 主机传输到 Exchange 2003 可以分为四个步骤:

  1. 远程 SMTP 主机在 TCP 端口 25 上建立 Exchange 2003 服务器的 TCP/IP 连接,然后传输邮件。本地 SMTP 协议服务可将邮件放在高级排队引擎的预提交队列中。
  2. 高级排队引擎可将邮件从预提交队列传输到预分类队列,以便分类程序对其进行处理。分类程序根据 Active Directory 检查限制、应用针对每个发件人和每个收件人的限制并解析收件人信息,以确定邮件发送至本地收件人还是远程收件人。然后,分类程序会将邮件放在分类后队列中,以将其返回到高级排队引擎。
  3. 高级排队引擎会将本地收件人的邮件从分类后队列中传输到本地传递队列中。
  4. Exchange 存储驱动程序可拾取邮件,并将其放在本地收件人的收件箱中。

Exchange/SMTP 邮件转换

顾名思义,SMTP(简单邮件传输协议)不定义复杂的邮件类型,如已送达回执请求、已读回执请求、会议请求或任务请求。实际上,SMTP 只处理一种类型的邮件:简单文本邮件。SMTP 邮件由一系列 7 位 ASCII 字符组成。邮件标题(包含发件人和收件人信息、主题和日期等)用一个空行(即回车符/换行符前面没有任何内容的行)与正文分开。如图 4 所示,SMTP 邮件格式(在 RFC 822 中定义)实际很简单。

1e72e69a-303e-4807-a1c4-ebb8ab95382a

基本 SMTP 邮件格式只能用于基于文本的电子邮件。若要支持附件,原始文件必须使用 UUENCODE 或多用途 Internet 邮件扩展 (MIME) 进行编码。有关使用 UUENCODE 还是使用 MIME 对邮件附件进行编码的决定,将取决于邮件接收客户端所支持的功能。

UUENCODE 是一种编码机制,可以将二进制数据转换成可打印的 ASCII 字符,以便将数据包含在邮件正文中,而不违反 SMTP 约定。图 4 中显示的邮件,包含附加的 UUENCODE 编码文件的 7 位字符流。

MIME 提供了将非文本信息编码为文本的另一种方法。MIME(在 RFC 1341 及其后续版本中定义)是一种非常灵活的格式。它说明了一种将各种内容类型的多个部分包含在一个电子邮件(文本和非文本)中的方法。邮件的各个部分可以是文本、图像、音频、视频或其他应用程序特定的数据。

note注意:
MIME 使用 Base64 编码/解码算法,该算法灵活、可靠,但会使编码的数据平均膨胀约 33%。这意味着 SMTP 连接器必须为每封邮件多传输 33% 的数据。

通过 SMTP 连接器将 Exchange 2003 组织连接到非 Exchange 邮件系统时,必须使用 UUENCODE 或 MIME 封装所有邮件内容,以免丢失 RTF 格式和扩展字符。封装的邮件可以采用可打印字符的形式插入到邮件中。

默认情况下,邮件使用 MIME 进行封装。不过,可以在 Exchange 系统管理器工具中,为每个 SMTP 域指定邮件格式。在“全局设置”下,显示 Internet 邮件格式对象的属性,然后切换到“邮件格式”选项卡。其中,可以选择以 HTML 格式显示邮件正文,如果收件人的电子邮件客户端支持 HTML 格式的邮件,则这是很好的选择。HTML 格式的邮件可保留 RTF 的大多数功能,如果以纯文本格式发送邮件正文,则这些功能会丢失。

note注意:
某些邮件管理员会阻止 HTML 格式的邮件,因为 HTML 邮件可能包含具有恶意代码(如蠕虫病毒)的脚本。询问远程管理员您能否采用 HTML 格式传输邮件。HTML 的替代格式是纯文本或使用传输中立封装格式 (TNEF) 的邮件封装,这两种格式将在本部分后面介绍。

表 1 显示了哪些 Exchange RTF 功能可以正确转换成 HTML,哪些功能不能正确转换。

表 1 RTF 与 HTML 之间的电子邮件转换

RTF (Exchange) HTML (MIME/SMTP)

大小

可以正确转换

颜色

可以正确转换

加粗

可以正确转换

下划线

可以正确转换

斜体

可以正确转换

删除线

可以正确转换

不能正确转换

嵌入式 OLE 对象,包括图形

已忽略

双删除线

转换成单删除线

上标

可以正确转换

下标

可以正确转换

卷影

已忽略

边框

已忽略

阳文

已忽略

阴文

已忽略

小号大写字母

已忽略

全部大写

已忽略

项目符号

可以转换,但忽略行距

编号

可以正确转换

为了避免从 RTF 转换成 HTML 时丢失格式信息,Outlook 用户可以将其客户端配置为默认情况下以 HTML 格式撰写邮件。此外,如果用户选择将 Microsoft Word 用作其电子邮件编辑器,则他们在撰写电子邮件时,可以使用 Word 附带的完整 HTML 编辑集。例如,他们可以用 HTML 格式撰写邮件,并在邮件中插入表。在邮件传输期间,将保留该表,因为它是本地的 HTML 结构。相反,从 RTF 转换成 HTML 期间,插入 RTF 邮件中的表将丢失。问题不是 HTML 格式的邮件能否包含表(或其他特定的 RTF 功能),而是从 RTF 到 HTML 的转换是否支持此 RTF 元素。

另一种选择是将 RTF 信息以 TNEF 格式封装,然后发送给远程收件人。如果您知道收件人使用的客户端支持 MAPI(如带 IMAP4 传输驱动程序的 Outlook),则这是一个很好的选择。通过发送 RTF 格式的邮件,可以确保不同邮件系统中 Outlook 用户之间的最大互操作性,因为保留了所有邮件属性。例如,日历信息要求使用 RTF 格式。用户可以用 RTF 格式互相发送特殊的邮件类型,如会议请求或任务请求。用户可以单独决定是否发送 RTF 格式的邮件,但也可以在 Exchange 系统管理器中,针对每个 SMTP 域启用此功能。在 Internet 邮件格式对象的属性中,切换到“高级”选项卡,然后在 Exchange RTF 下选择选项“始终使用”。

note注意:
发送以 TNEF 封装的邮件时,将保留所有 MAPI 属性,但收件人必须使用 MAPI 兼容的邮件客户端。不支持 MAPI 的客户端将显示纯文本或 HTML 格式的邮件,附加的附件名称为 winmail.dat,收件人无法使用该附件。这可能会让收件人迷惑不解。因此,不应该将 RTF 信息发送到 SMTP 域,除非您确保收件人使用的客户端与 MAPI 兼容。

基于 X.400 的邮件传输

在 SMTP 成为邮件传输的其中一个领先标准之前,商业电子邮件服务提供商和大型公司已部署了 X.400 主干来连接不同的邮件系统。现在,SMTP 比 X.400 更受欢迎,因为它更简便且基于 Internet。但是,要求邮件传输必须安全和可追踪的律师事务所和法律部门、金融机构、保险公司及其他组织,仍然使用 X.400 作为通用邮件标准。在基于 SMTP 的主干中,很难发现路由错误的邮件,或很难确定含攻击性文本的电子邮件的来源。但是,在 X.400 主干中,每个连接都需要身份验证。所有邮件传输代理 (MTA) 必须将自身标识为已授权的 MTA 后,才能传输邮件。由于 Internet 会受到垃圾邮件和电子邮件病毒的攻击,因此 X.400 重新得到了普及。

Exchange Server 2003 通过 Microsoft Exchange 邮件传输代理 (MTA) 堆栈服务支持 X.400。Exchange MTA 按照 1988 一致性年份支持 X.400,并可以通过 TCP/IP 或 X.25 与远程 X.400 1984 和 1988 系统进行通信。与 Exchange 2003 进行通信时,以后一致性年份(如 1992)的 X.400 系统必须将其功能集缩小到 1988 的标准。X.400 标准要求 X.400 系统缩减到其通信伙伴的功能。

note注意:
X.400 连接器仅适用于 Exchange Server 2003 企业版。

Exchange 到 X.400 的邮件传输

图 5 显示了将邮件从 Exchange 2003 发送到远程 X.400 系统的过程。

e09b7308-d8eb-44c9-8766-65bf2b3832cd

通过 X.400 将邮件从 Exchange 2003 传输到非 Exchange 邮件系统的过程如下:

  1. 用户发送新邮件,Exchange 存储驱动程序将该邮件放在预提交队列中,以将其传递到 Exchange 2003 传输引擎。在 Exchange 2003 中,本地或远程收件人的所有邮件都必须通过传输引擎进行传递。
  2. 高级排队引擎可将邮件从预提交队列传输到预分类队列,以便分类程序对其进行处理。分类程序根据 Active Directory 检查限制、应用针对每个发件人和每个收件人的限制并解析收件人信息,以确定邮件发送至本地收件人还是远程收件人。然后,分类程序会将邮件放在分类后队列中,以将其返回到高级排队引擎。
  3. 高级排队引擎会将非本地收件人的邮件从分类后队列中传输到预路由队列,并调用路由引擎。路由引擎可确定收件人是 X.400 邮件系统上的用户(基于用户的目标地址及与 X.400 连接器相关联的地址空间),然后将邮件移动到 Exchange MTA 的链接队列。队列管理器组件可管理链接队列。
  4. Exchange 存储驱动程序会通知 Exchange MTA 新邮件等待传输。MTA 从链接队列中获取邮件,按照 X.400 连接器属性中指定的一致性年份和远程 MTA 字符集,将收件人信息和邮件正文从邮件数据库编码格式 (MDBEF) 转换成相应的 X.400 格式,然后将邮件放在文件系统上的 MTA 内部队列中。
  5. Exchange MTA 可建立与远程 MTA 的连接,标识自己的身份,然后在连接被接受后传输邮件。随后,远程 MTA 会将邮件传递到最终目标。

X.400 到 Exchange 的邮件传输

图 6 显示了从远程 X.400 MTA 接收邮件的过程。

0b0e90b4-fc07-43a0-9a81-29b6af412b2f

将邮件从远程 X.400 MTA 传输到 Exchange 2003 可分为以下几个步骤:

  1. 远程 X.400 MTA 建立与本地 Exchange MTA 的连接,将自身标识为已授权的 MTA,在 Exchange MTA 接受此连接并成功建立关联之后传输邮件。Exchange MTA 将传入的邮件存储在文件系统上的邮件数据库中。
  2. Exchange MTA 将收件人信息和邮件正文转换成 Exchange 格式,并将邮件放在 SMTP 邮箱存储中,以将其传递到 SMTP 传输引擎进行传递。在 Exchange 2003 中,所有邮件都必须通过 SMTP 传输引擎进行传递。
  3. Exchange 存储驱动程序将邮件放在高级排队引擎的预提交队列中。
  4. 高级排队引擎可将邮件从预提交队列传输到预分类队列,以便分类程序对其进行处理。分类程序根据 Active Directory 检查限制、应用针对每个发件人和每个收件人的限制并解析收件人信息,以确定邮件发送至本地收件人还是远程收件人。然后,分类程序会将邮件放在分类后队列中,以将其返回到高级排队引擎。
  5. 高级排队引擎会将本地收件人的邮件从分类后队列中传输到本地传递队列中。
  6. Exchange 存储驱动程序可拾取邮件,并将其放在本地收件人的收件箱中。

Exchange/X.400 邮件转换

X.400 连接器支持各种内容类型和字符集。X.400 内容类型包括 P2(1984 一致性年份)、P22(1988 一致性年份)、二进制数据的正文部分 14 或正文部分 15。Exchange MTA 与 X.400-84 MTA 进行通信时,将使用 P2 内容类型发送邮件正文,使用正文部分 14 发送附件。按照 1988 一致性年份进行通信时,将使用 P22 内容类型发送文本,并可以将服务器配置为使用正文部分 14 或正文部分 15(采用文件传输正文部分 (FTBP) 格式)发送附件。

Exchange MTA 支持邮件文本使用以下 X.400 正文部分:

  • 国际字母表 5 (IA5) 与 US-ASCII 字符类似且包括西欧字符的字符集。
  • 国际标准化组织 (ISO) 6937 包括 333 个拉丁脚本字符及无空格发音符的字符集。按照 ISO 2022 中的定义,若要支持其他语言,必须进行字符集转换。ISO 6937 是 Teletex 字符集定义的超集。
  • ISO 8859 一系列 8 位单一代码的字符集。基于单字节字符的大多数语言,都可以在其中一个 ISO 8859 字母表中得到支持。
  • Teletex 61 (T.61) ASCII 字符的子集以及国际 8 位字符。

P2 或 P22 内容类型中,任何字符集都不能表示 RTF 信息,甚至 OLE 对象。仅当接收方可以支持 MAPI 邮件格式时,才可以支持 RTF。许多基于 X.400 的邮件系统,如 HP OpenMail,支持 Outlook 和 MAPI。

Exchange MTA 可以用 TNEF 封装整个邮件,并将其作为其他文件附件进行发送。其原理与前面讨论的 SMTP 连接器原理相同。如果接收系统可以处理 TNEF 附件(例如,如果收件人使用的是 Microsoft Outlook),则邮件会显示所有 RTF 信息。但是,如果接收系统无法处理 TNEF,则可能无法读取邮件文本和附件。必须确保 X.400 连接器配置与非 Exchange 邮件系统的功能相适应。

目录同步

目录同步过程是将有关 Exchange 2003 用户的目录信息从 Active Directory 传播到非 Exchange 邮件系统的目录,同时将用户相关信息从非 Exchange 邮件系统传播到 Exchange 2003 要使用的 Active Directory。目录同步完成后,每个系统都会有一个针对组合的邮件组织的目录数据(用户、组等)完整副本。

目录同步包括两个连续过程:

  • 同步 Active Directory 到非 Exchange 邮件系统的收件人
  • 同步非 Exchange 邮件系统到 Active Directory 的收件人

遗憾的是,无法使用 SMTP 连接器或 X.400 连接器在 Exchange 2003 与非 Exchange 邮件系统之间启用自动、已安排的目录同步,因此,必须实现手动或半自动的解决方案。实现自定义解决方案进行目录同步时,请记住必须实现双向过程,因为必须在两个目录中更新收件人属性。有关如何以编程方式处理非 Exchange 邮件系统中目录信息的信息,请与邮件系统的供应商联系。本部分介绍如何使用标准的 Active Directory 工具来处理 Active Directory。

同步非 Exchange 邮件系统到 Active Directory 的目录条目

从非 Exchange 邮件系统到 Active Directory 的目录同步包括以下过程:

  1. 从非 Exchange 邮件系统提取目录信息 可以使用多种工具获取源目录信息,包括应用程序编程接口 (API) 或 LDAP。如果非 Exchange 邮件系统支持 LDAP,则可以使用 Exchange 迁移向导,从非 Exchange 邮件系统中提取目录信息。对于 LDAP 目录,请确保选择选项“从 Internet 目录(LDAP,通过 ADSI)迁移”,在向导的下一页上选择选项“仅提取迁移文件”。Exchange 迁移向导可将已提取的目录信息放在名为 directory.pri 的主迁移文件中,该文件是一个逗号分隔值 (.csv) 文本文件,可以用作进一步处理(如目录导入)的基础。有关迁移文件和 Exchange 迁移向导的详细信息,请参阅了解 Exchange Server 2003 中的互操作性和迁移

    note注意:
    LDAP 符合目录通常提供 SMTP 地址信息,因此,如果使用 LDAP 符合目录连接邮件系统,则应该使用 SMTP 连接器。如果使用 X.400 连接器,请确保获得采用 X.400 格式的地址信息。大多数邮件系统都提供您可以使用的专用目录导出功能。要求负责旧版邮件系统的管理员为您提供已导出的目录信息,其格式与您在 Exchange 2003 与非 Exchange 邮件系统之间部署的连接器相适应。
  2. 准备将导入 Active Directory 中的目录信息 用于将目录信息导入 Active Directory 中的工具,可确定必须如何组织数据的结构以成功完成导入。例如,如果您使用的是 Ldifde.exe,则必须以 LDAP 数据交换格式 (LDIF) 提供源数据。LDIF 在 RFC 2849 中进行定义。但是,如果您熟悉使用 ADSI 或 CDOEXM 进行编程,则可以制定自定义解决方案来导入数据。源数据的格式取决于您在自定义解决方案中实现的分析例程。理想情况下,使用一种无需执行格式转换即可分析输入文件的工具。例如,您可能需要使用从 LDAP 目录中导出 directory.pri 文件时所采用的格式,直接分析该文件基于 .csv 的结构,以将收件人信息导入 Active Directory。有关使用 ADSI 或 CDOEXM 进行编程的详细信息,请参阅 Exchange SDK (https://go.microsoft.com/fwlink/?LinkId=25925)。

  3. 将目录信息导入 Active Directory 无法使用 Exchange 迁移向导来执行实际的目录同步,因为 Exchange 迁移向导用来在 Exchange 2003 中创建邮箱。目录同步的基础是假设收件人仍处于旧版系统中。若要正确执行目录同步,您的解决方案必须创建已启用邮件的用户帐户或已启用邮件的联系人,而不是创建已启用邮箱的用户帐户。建议您在 Active Directory 中为所有非 Exchange 用户创建一个指定的组织单位,以便在迁移过程中使用。
    对于非 Exchange 用户,可以在 Active Directory 中创建以下类型的用户帐户:

    • 禁用的 Windows 用户帐户 如果非 Exchange 用户尚未在 Active Directory 环境中,但迁移到 Exchange 2003 之后将在该环境中,则请创建禁用的 Windows 用户帐户。
    • 新的 Windows 用户帐户 对于迁移之前在 Active Directory 环境中工作的非 Exchange 用户,请创建启用的 Windows 帐户。
    • Windows 联系人 对于不在 Active Directory 环境中的非 Exchange 用户,请创建 Windows 联系人。在迁移过程中,Exchange 迁移向导可以将这些联系人对象转换为用户帐户。
      在旧版邮件系统中,会产生一个有关通讯组列表的有趣问题。您可以将通讯组列表作为联系人对象进行同步,其优点是不需要维护 Active Directory 中的通讯组列表成员身份信息。但是,如果将通讯组列表作为联系人对象进行同步,则发送到通讯组列表的邮件必须首先传输到旧版邮件系统,以便展开通讯组列表,然后才能将邮件传递给各个收件人。如果通讯组列表包含作为 Exchange 2003 组织中用户的收件人,则展开通讯组列表后,邮件必须返回到 Exchange 2003 组织。为了避免这种不必要的邮件传输,可以在 Active Directory 中创建已启用邮件的组,并直接指定各个成员。如果执行此操作,则 Exchange 2003 可以立即展开通讯组列表,并且不会发生向旧版邮件系统传输其他邮件的开销。
      Active Directory 中的组可以包含任何类型的收件人对象(如用户帐户、联系人或其他组)。在 Active Directory 中创建与旧版系统中收件人相对应的已启用邮件的用户帐户或已启用邮件的联系人之后,可以镜像旧版系统中的通讯组列表,并添加所需的收件人对象作为成员。以后使用 Exchange 迁移向导迁移用户时,该向导会通过将要迁移的帐户的电子邮件地址与 Active Directory 中目标对象的电子邮件地址进行匹配,来查找已启用邮件的现有对象。在迁移过程中,Exchange 迁移向导将这些收件人对象转换成已启用邮箱的用户帐户,并保留通讯组成员身份信息。但是,如果不使用 Exchange 迁移向导,则必须采取其他措施,在迁移后将已启用邮箱的用户帐户重新添加到其所有通讯组中。可以用编程方式执行此步骤。
    note注意:
    Exchange 迁移向导不会从旧版邮件系统中导出有关通讯组列表的目录信息。必须使用其他目录导出方法,或者在 Active Directory 中手动创建通讯组列表。
  4. 更新 Active Directory 中的目录信息 将目录信息导入 Active Directory 后,必须确保目录信息在两个目录中都保持最新。例如,如果在旧版系统中更改或删除用户,也必须在 Active Directory 中更新或删除相应的收件人对象。更改或删除现有收件人对象要求您在 Active Directory 中查找现有对象,然后执行更新。
    在 Active Directory 中查找与下列项对应的收件人对象:

    • 非 Exchange 邮件系统中已更改的收件人对象 可以使用收件人对象的电子邮件地址查找其在 Active Directory 中的对应电子邮件地址,因为 Active Directory 对象的主电子邮件地址在旧版邮件系统中为收件人的 SMTP 或 X.400 地址。但是,必须说明电子邮件地址不匹配的情况。用户在 Active Directory 中可能有尚未启用邮件的用户帐户,或者该用户的原始电子邮件地址可能已经更改(例如,用户在旧版邮件系统中有一个新的 SMTP 地址)。在这些情况下,匹配的电子邮件地址不会工作,必须使用其他属性来查找匹配的收件人对象。可以在旧版系统中使用用户的显示名或别名,或者允许您在源收件人对象与目标收件人对象之间建立可靠关联的任何其他属性。
    • 非 Exchange 邮件系统中已删除的收件人对象 从旧版非 Exchange 邮件系统中删除源对象之后,在 Active Directory 中查找目标对象比较复杂。已删除的源对象不再存在,因此,无法将其用作参考以在 Active Directory 中查找相应的收件人对象。在这种情况下,可以从 Active Directory 中手动删除相应的收件人对象,也可以将非 Exchange 邮件系统中的完整地址列表与 Active Directory 中相应收件人对象的完整列表进行比较,以确定哪些对象仅存在于 Active Directory 中。已启用邮件、但在源邮件系统中没有对应帐户的 Active Directory 帐户,表明源对象已被删除。
      若要比较地址列表,必须将 Active Directory 中创建的收件人对象与非 Exchange 邮件系统中的对应对象关联起来。可以使用旧版邮件系统的 SMTP 域名来建立这种关联。另一种选择是将组织单位专门用于属于特定旧版邮件系统的收件人对象。然后,可以将该组织单位中的对象与旧版系统中收件人的列表进行比较。比较地址列表的第三种方法(可能是最可靠的方法)是将有关收件人所在邮件系统的特定信息写入 Active Directory 中收件人对象的属性内。然后,可以将此属性用作 LDAP 查询的基础。可以使用扩展属性或称为 importedFrom 的属性,来注册特定的同步信息。

图 7 显示了将目录信息从非 Exchange 邮件系统传输到 Active Directory 的一般过程,该过程基于 LDAP、Exchange 迁移向导以及处理 directory.pri 文件的自定义脚本。如果您比较喜欢使用没有自定义脚本的解决方案,则可以将自定义脚本替换为 Ldifde.exe,但请记住,随后必须将 directory.pri 文件格式转换成 LDF 格式以支持 Ldifde.exe。

97d353ac-22d6-41fb-9266-a4be15f0dca0

同步 Active Directory 到非 Exchange 邮件系统的目录条目

从 Active Directory 到非 Exchange 邮件系统的目录同步的原理与从非 Exchange 邮件系统到 Active Directory 的目录同步原理相同。必须从 Active Directory 中提取有关已启用邮箱的用户帐户的信息,处理该信息,然后在旧目录中导入、更新或删除该信息。可以使用 Ldifde.exe、Csvde.exe 或 ADSI 等工具来提取 Active Directory 数据。也可以使用 Exchange 迁移向导,因为 Active Directory 是一个支持的 LDAP 符合目录。使用 Exchange 迁移向导提取 Active Directory 数据的优点是:已提取的目录信息在 directory.pri 文件中的存放方式与任何其他 LDAP 目录中目录信息的存放方式完全相同。因此,可以重复使用从非 Exchange 到 Active Directory 执行目录同步时所用的文件分析例程。只有 API 或用于将目录信息导入旧目录的工具会有所不同。有关如何将目录信息导入旧版邮件系统的详细信息,请与邮件系统供应商联系。

note注意:
为了使 Active Directory 到非 Exchange 的目录同步正常工作,非 Exchange 邮件系统必须能够保存本地邮件系统以外的用户的目录信息。大多数系统都允许您将 SMTP 或 X.400 收件人对象与其目录中的连接器或远程域关联起来。通过 SMTP 连接邮件系统时,必须将 Exchange 用户作为 Internet 收件人进行同步。使用 X.400 连接器连接邮件系统时,必须将 Exchange 用户作为 X.400 收件人进行同步。所有 Exchange 用户都至少有一个 SMTP 地址和一个 X.400 地址。

图 8 显示了将目录信息从 Active Directory 传输到非 Exchange 邮件系统的一般过程,该过程使用 Exchange 迁移向导和一个自定义脚本,该自定义脚本使用非 Microsoft API 或导入工具将收件人对象放在旧目录中。

c2b51a74-3286-4f1d-9d32-f1029c1d2258

使用 Exchange 迁移向导从 Active Directory 提取目录信息的一个缺点是:无法从 Active Directory 中提取已启用邮件的用户帐户、联系人或通讯组的信息。如果 Exchange 2003 组织连接到多个非 Exchange 邮件系统,或者如果为 Internet 上的收件人创建了已启用邮件的对象,则可能需要在自定义目录同步过程中包括这些已启用邮件的对象,以便非 Exchange 邮件系统中的用户很方便地与将 Exchange 2003 组织用作主干的邮件环境中的所有用户进行通信。必须使用 Ldifde.exe、Csvde.exe 或 ADSI 等工具,才能从 Active Directory 中提取已启用邮件的对象。同步已启用邮件的通讯组的最佳方法是作为联系人对象,以便绕过组成员身份的同步。可以采用多种方法解决通讯组问题,这在了解 Exchange Server 2003 中的互操作性和迁移中进行了论述。

note注意:
如果决定同步已启用邮件的联系人,则必须仔细检查目录同步过程,以免复制地址信息(如果同步的已启用邮件的对象仍是旧版邮件系统中的实际收件人,则可能会出现这种情况)。

目录同步替代方案

对于喜欢使用命令行工具和 API 的系统管理员,实现目录同步的自定义解决方案是一种很好的选择。但是,如果您希望实现一种更即时可用的解决方案,则可能需要考虑以下选项:

  • Exchange Server 5.5 或 Exchange 2000 Server 中可用的邮件连接器 如果您在混合的 Exchange 组织上运行,则可以将邮件连接器用于邮件传输和目录同步,这些连接器是 Exchange 5.5 或 Exchange 2000 随附的连接器,但在 Exchange 2003 中均不可用。例如,可以使用 Exchange 2000 无缝连接到 Microsoft Mail for PC Networks 或 Lotus cc:Mail,使用 Exchange 5.5 连接到 Microsoft Mail for PC Networks、Lotus cc:Mail、IBM PROFS 以及带有直接网关连接器的 IBM 系统网络体系结构分发服务 (SNADS)。
  • Microsoft 元目录服务 (MMS) 可以使用 MMS 将多个目录互相集成。MMS 支持许多目录服务,包括 Active Directory、Exchange 5.5 目录、Microsoft Windows NT® 域、Lotus Notes/Domino、Lotus cc:Mail、Novell NetWare Directory (NDS) 或 Novell NetWare Bindery、Novell GroupWise、Banyan Systems BeyondMail 和智能邮件、结构化查询语言 (SQL)/开放式数据库连接 (ODBC) 和基于 LDAP 的目录服务器(如 Netscape、Sun ONE(以前称为 Netscape iPlanet))以及基于 X.500 的目录。如果 Exchange 2003 组织必须与非 Exchange 邮件系统永久共存,则 MMS 是很好的选择。但是,如果计划将来通过迁移到 Active Directory 和 Exchange 2003 来替换旧基础结构,则不能保证 MMS 的投资。
  • Lotus Notes 连接器 如果将 Exchange 2003 连接到 Lotus Notes/Domino,但希望通过 SMTP 而不是使用 Lotus Notes 连接器发送电子邮件,则可以使用 Lotus Notes 连接器提供的目录同步功能使目录保持同步。只能修改针对目录属性的映射表,以便 Exchange 收件人在 Lotus Notes 中显示为 SMTP 收件人,Lotus Notes 收件人在 Active Directory 中显示为 SMTP 联系人。有关如何编辑映射表的详细信息,请参阅 Microsoft 知识库文章 303724“使用 SMTP 地址在 Notes 与 Exchange 之间进行目录同步”(https://go.microsoft.com/fwlink/?linkid=3052&kbid=303724)。

日历集成

Exchange 2003 在称为 SCHEDULE+ FREE BUSY 的隐藏系统公用文件夹中维护忙/闲信息,它需要日历连接器实例才能将非 Exchange 用户的忙/闲信息放在此系统文件夹中。遗憾的是,通过 SMTP 连接器或 X.400 连接器将 Exchange 2003 连接到非 Exchange 邮件系统时,日历连接器不可用。

可以通过 Outlook Internet 忙/闲 (IFB) 发布来解决此限制。Outlook 用户可以使用此功能在共享位置发布忙/闲信息,以便其他用户检索此信息,否则不能访问此信息。Outlook 用户可以使用 Microsoft Office Internet 忙/闲服务或在内部网络中的某个位置发布其忙/闲时间。使用忙/闲服务时,可以限制对已发布信息的访问,以便只有您特殊授权的服务成员才能查看信息。默认情况下,Outlook 每隔 15 分钟对忙/闲服务上的忙/闲信息进行一次更新,以便反映最新日程安排。当其他用户为您安排会议日程时,您发布到忙/闲服务的忙/闲时间会在其会议请求中的“计划”选项卡上自动显示为阴影条,以便他们知道您在忙碌中的时间。有关忙/闲服务的详细信息,请转到 https://go.microsoft.com/fwlink/?LinkId=25927

也可以在内部服务器上发布忙/闲信息。此选项的优点是不需要任何服务成员身份。您可以使用 Intranet 上的 Web 服务器、内部文件传输协议 (FTP) 服务器或文件服务器来提供共享库。这些选项的唯一区别就是必须在 Outlook 配置中为忙/闲信息的发布位置指定的统一资源定位器 (URL)。可以使用任何有效的 URL 格式,如:http://、file://\ 或 ftp://。

图 9 显示了在具有非 Exchange 邮件系统的环境中实现忙/闲信息共享的一种可能性。

81b6e883-6995-401f-8fa5-5c74849a9a2f

如果所有用户都有 Outlook,则通过 Internet 或 Intranet 发布忙/闲信息可以很好地工作。但是,仅当将 Outlook 与“仅 Internet 邮件”选项一起使用时,才支持 IFB 发布。有关如何为 Outlook 配置“仅 Internet 邮件”选项的信息,请参阅 Outlook 产品文档。

其他邮件客户端也可以支持通过 Internet 或 Intranet 发布忙/闲信息,因为 IFB 发布基于一种称为 iCal 的 Internet 工程任务组 (IETF) 标准。IFB 发布基于 vCalendar 标准,该标准是 iCal 的一部分,并且是忙/闲信息的格式和存储的新兴标准。

如果在用户通常通过 Exchange 的 MAPI 传输服务访问其邮箱的 Exchange 组织中启用 IFB 发布,则 Outlook 会继续将 SCHEDULE+ FREE BUSY 系统公用文件夹用于基于服务器的地址列表中的所有 Exchange 收件人。此外,它不会检查这些基于服务器的帐户的忙/闲服务或共享库。这些基于服务器的帐户包括所有 Exchange 用户,也包括与 Active Directory 同步的所有非 Exchange 收件人。

也就是说,在执行目录同步之前,IFB 发布可以很好地工作。这是因为,就 Outlook 来说,Active Directory 中已启用邮件的用户帐户和已启用邮件的联系人都是 Exchange 2003 组织中的收件人,Outlook 不期望为这些收件人查找在公司网络中的共享位置发布的忙/闲信息。IFB 发布不能正常工作,因为 Outlook 仅检查具有已同步收件人对象的非 Exchange 用户的 SCHEDULE+ FREE BUSY 系统公用文件夹,但忙/闲信息在此位置并不存在。

若要解决 IFB 发布不能与 Outlook 一起使用的问题,除“仅 Internet 邮件”选项之外,还有以下选择:

  • 不执行目录同步 如果共享日历信息比在所有邮件系统中提供一致的地址列表更重要,则可以选择不同步目录。但是,实现无缝互操作性通常需要同步目录,并且与 IFB 发布相比,它具有更高的优先权。如果要提供一致的、基于服务器的地址列表,则必须寻找其他解决方案来提供对忙/闲信息的跨平台访问。

  • 将日历信息另存为网页 如果您不想使用 IFB 发布功能,则可以将包含所有约会和会议的日历的一个月快照发布到网页上。但是,需要注意的是,此方法会泄露有关会议和其他约会的所有详细信息。在此方案中,将发布多个忙/闲时间。此外,当您在“日历”文件夹中添加、删除或修订约会时,网页不会自动更新,因此每次要更新 Web 版本时都需要保存日历。

  • 通过 ASP.NET 页提供对日历信息的访问 不需要将日历快照另存为网页,即可选择使用 Exchange 编程 API(如 CDOEX)实现忙/闲查找的自定义解决方案。CDOEX 通过 IAddressee 接口提供 GetFreeBusy 方法,可以在 ASP.NET 页或 Visual Basic 程序中以编程方式调用该方法。也可以使用其他编程语言,如 C++ 或 Microsoft C#。顾名思义,GetFreeBusy 方法可以获得有效 Exchange 2003 用户的忙/闲信息。

    note注意:
    CDOEX 只能在运行 Exchange 2000 或 Exchange 2003 的服务器上直接使用。为此,最好在 Exchange 2003 服务器上通过 Microsoft Internet 信息服务 (IIS) 发布的 ASP.NET 页中使用 GetFreeBusy 方法。

    以下 Visual Basic .NET 代码示例(从 Exchange SDK 中获取)演示了如何获取指定用户的忙/闲信息。可以使用此代码为非 Exchange 用户提供基于 Web 的解决方案,以访问 Exchange 用户的忙/闲信息。有关 GetFreeBusy 方法的详细信息,请参阅“检查忙/闲状态”(https://go.microsoft.com/fwlink/?LinkId=25928)。

    ' Reference to Microsoft ActiveX Data Objects 2.5 Library
    ' Reference to Microsoft CDO for Exchange 2000 Library
    ' Reference to Active DS Type Library
    Function GetFreeBusyString(ByVal strUserUPN As String, _
                               ByVal dtStartDate As Date, _
                               ByVal dtEndDate As Date, _
                               ByVal Interval As Integer) As String
    
       Try
          ' Variables.
          Dim iAddr As New CDO.Addressee()
          Dim freebusy As String
          Dim Info As New ActiveDs.ADSystemInfo()
    
          iAddr.EmailAddress = strUserUPN
          If Not iAddr.CheckName("LDAP://" & Info.DomainDNSName) Then
             Throw New System.Exception("Error occurred!")
          End If
    
         ' Get the free/busy status in Interval minute intervals
         ' from dtStartDate to dtEndDate.
         freebusy = iAddr.GetFreeBusy(dtStartDate, dtEndDate, Interval)
         GetFreeBusyString = freebusy
    
       Catch err As Exception
          Console.WriteLine(err.ToString())
          GetFreeBusyString = ""
       End Try
    End Function
    

    GetFreeBusy 方法只能用于获取 Exchange 忙/闲信息。但是,许多邮件系统都提供访问邮箱和公用库中数据的 Web 接口。请与您的旧版系统供应商联系,以查看能否使用类似的 API,以便通过基于 Web 的自定义解决方案为 Exchange 用户提供日历信息的访问权限。

  • 配置 Outlook 以使用 IFB 发布,但使用其他解决方案访问已发布的忙/闲信息 在 ASP.NET 解决方案中,用于为非 Exchange 用户和 Exchange 用户提供对彼此忙/闲信息的访问的其他选择(可能是更好的选择)是分析 vCalendar 文件,在启用 IFB 发布后,Outlook 客户端可以将这些文件写入共享目录中。发布忙/闲信息始终正常工作;对于 Exchange 用户而言,唯一的问题是查找已同步收件人对象的忙/闲信息。ASP.NET 解决方案可以解决此问题。Exchange 用户和非 Exchange 用户可以配置其 Outlook 客户端,以在 Web 服务器上发布忙/闲信息,然后将基于 ASP.NET 的解决方案用作他们安排会议时的一种工具。实现 ASP.NET 解决方案来分析 vCalendar 文件超出了本书所讲述的范围。有关详细信息,请参阅 Exchange SDK (https://go.microsoft.com/fwlink/?LinkId=25925)。

  • 忽略此问题 另一种选择是避免将忙/闲集成在一起。如果能够将团队和部门作为一个单位进行迁移,则用户可能不需要跨平台查找忙/闲信息。如果同时将所有可能的会议候选人迁移到 Exchange 2003,则用户可以在计划会议时使用标准的 Outlook 功能查找忙/闲信息。