SMTP 协议扩展

 

上一次修改主题: 2006-11-03

高级排队引擎不是 SMTP 服务中唯一的 COM 事件发送器。SMTP 协议引擎也是 COM 事件的主要发送器,它专门发送 SMTP 协议事件。核心 SMTP 协议引擎负责所有标准 SMTP 通信,并处理大部分标准 SMTP 服务扩展(即 RFC 821 和 RFC 1869 中定义的扩展简单邮件传输协议 (ESMTP) 标准)。可以使用协议事件来修改 SMTP 协议,以便添加新的 ESMTP 命令,甚至更改现有命令的操作。Exchange Server 2003 使用这些协议事件来实现 Exchange 特有的扩展 SMTP 命令,以便更高效地与组织中的其他 Exchange 服务器通信(相对于使用标准 SMTP 而言)。

当使用 telnet 连接到 SMTP 虚拟服务器的 TCP 端口时,可以验证 Exchange Server 2003 的扩展 SMTP 命令是否已加载。如下图所示,当发出 EHLO 命令以启动 ESMTP 连接时,服务器的响应指出 SMTP 虚拟服务器支持的功能。发出 HELP 命令时,将列出标准命令。

7fee5659-17ca-4ed0-9e01-97592772cb9e

下表说明了 Exchange 扩展的 SMTP 服务所支持的 SMTP 功能。

Exchange Server 2003 中受支持的 SMTP 功能

SMTP 服务器响应 注释

8BITMIME

指出本地 SMTP 虚拟服务器支持八位的多用途 Internet 邮件扩展 (MIME) 邮件。

AUTH、AUTH GSSAPI NTLM LOGIN 以及 AUTH=LOGIN

指出本地 SMTP 虚拟服务器支持 SMTP 身份验证服务扩展。AUTH 关键字之后的其他信息指出支持的身份验证机制。

BDAT、CHUNKING

DATA 命令的另一种形式,采用两个参数。如果 SMTP 虚拟服务器用 CHUNKING 响应 EHLO 关键字,则意味着它支持BDAT 命令,并将成块地接受邮件。

第一个参数指示二进制数据包的长度,这样 SMTP 主机便不必持续地扫描到数据的末尾。接收方服务器计算邮件的字节数,如果邮件大小等于 BDAT 命令发送的值,则该服务器便认为已接收了全部的邮件数据。第二个参数指示该数据包是否是当前传输中的最后一个数据包。第二个参数是可选的。

BINARYMIME

对 MAIL 命令的 BODY 参数使用“BINARYMIME”值,意味着 SMTP 虚拟服务器接受没有传输编码但包含二进制内容的邮件。如果 SMTP 服务器接受 BODY 参数为 BINARYMIME 的 MAIL 命令,则表示同意保留使用 BDAT 命令传递的每个八位字节中的所有位。BINARYMIME SMTP 扩展只能与 CHUNKING 一起使用。

DATA

远程主机发送的、用于启动邮件内容传输的命令。

DSN

一个 ESMTP 命令,用于启用在 Request for Comments (RFC) 1891 中定义的传递状态通知。

EHLO

由客户端发送,指示 ESMTP 会话开始。服务器可以在它对 EHLO 的响应中表明自己支持 ESMTP 命令(图 6.14)。

ENHANCEDSTATUSCODES

指出 SMTP 服务器提供增强的错误状态代码。所有 SMTP 状态响应的文本部分的开头都有 RFC 1893 中定义的状态代码(不同于最初的问候语以及对 HELO 或 EHLO 的响应)。

ETRN

由 SMTP 服务器发送的命令,用于请求本地虚拟服务器为 ETRN 命令中指定的域发送其队列中包含的所有电子邮件。

HELO

由客户端发送,用于标识客户端(通常带一个域名),并指示标准 SMTP 会话开始。

HELP

返回 SMTP 虚拟服务器在标准 SMTP 会话(相对于 ESMTP 会话)中支持的 SMTP 命令列表。

MAIL

通过标识邮件的发件人来标识邮件传输开始;以 MAIL FROM 的形式使用。

PIPELINING

能够发送命令流,也就是无须在发送每个命令后等待响应。

QUIT

指示标准 SMTP 会话或扩展 SMTP 会话结束。

RCPT

标识邮件的收件人;以 RCPT TO 的形式使用。

RSET

使整个邮件的处理无效,并重置缓冲区。

SIZE

提供一种使 SMTP 虚拟服务器能够指出所支持的最大邮件大小的机制。兼容的服务器必须提供大小范围,以指出可以接受的最大邮件大小。远程主机发送的邮件不应超过服务器所指出的这一大小。

STARTTLS

指出 SMTP 服务器支持传输层安全性 (TLS) 上的安全 SMTP。TLS 上的安全 SMTP 的 SMTP 服务扩展是在 RFC 2487 中定义的。

TURN

允许远程主机和本地主机在不建立新连接的情况下互换角色,并沿着相反的方向发送邮件。

VRFY

验证是否可以使用邮箱来传递邮件。例如,VRFY TED 验证 Ted 的邮箱是否驻留在本地服务器上。默认情况下,该命令在 Exchange 2003 中可用,但无法验证用户。尽管无法验证用户,但服务器将通知远程主机邮件将被接受。服务器响应的格式如下:252 2.1.5 Cannot VRFY user, but will take message for <Ted@TailspinToys.com>

XEXCH50

能够在 Exchange Server 2003 的服务器对服务器通信中,发送 Message Database Encoding Format (MDBEF) 格式的扩展邮件传输信封属性。

X-EXPS GSSAPI NTLM LOGIN、X-EXPS=LOGIN

X-EXPS 是 Exchange 专有的一个命令。它与 AUTH 类似,因为它指出了可供 Exchange Server 2003 和 Exchange 2000 Server 的服务器使用的身份验证方法,具体的验证方法如下所述:

  • GSSAPI 一种代表一般安全服务应用程序编程接口的方法,能够实现采用 Kerberos 的身份验证。
  • NTLM 一种代表 Windows NT and LAN Manager 的方法,能够实现采用 Windows NT 质询/响应协议的身份验证。
  • LOGIN 一种代表 AUTH LOGIN 的方法,具体地说是一种明文身份验证方法,会用到 base-64 编码的用户名和密码。

X-LINK2STATE

将链路状态传播支持添加到 SMTP 服务中。有关在路由组之中和路由组之间用来传播链路状态信息的链路状态算法的详细信息,请参阅邮件路由体系结构

note注意:
所有 Exchange 特有的 SMTP 命令都以“X”(不包括引号)开头。如果这些命令未在 SMTP 虚拟服务器的 EHLO 响应中列出,则说明服务器运行的是 Windows Server 2003 基础版 SMTP 服务。在这种情况下,必须重新安装 Exchange Server 2003 及所有 Service Pack。

SMTP 协议引擎触发协议事件,以控制主机对主机的通信。在通过 SMTP 进行此类通信时,可能发生三种主要类型的事件:

  • SMTP 服务收到 SMTP 命令 当远程 SMTP 主机或客户端连接到本地 SMTP 服务,并通过发送 HELO 或 EHLO 命令来建立会话时,会发生这些事件。此类别中的事件是传入连接上的 SMTP 协议 OnInboundCommand 事件。
  • SMTP 服务收到 SMTP 响应 当本地 SMTP 服务收到远程 SMTP 主机或客户端对出站 SMTP 命令的响应时,会发生这些事件。此类别中的事件是出站连接上的 SMTP 协议 OnServerResponse 事件。
  • SMTP 服务发送 SMTP 命令 当本地 SMTP 服务连接到远程 SMTP 主机并建立会话以传输邮件时,会发生这些事件。此类别中的事件是出站连接上的 SMTP 协议 OnSessionBegin、OnMessageStart、OnPerRecipient、OnBeforeData 和 OnSessionEnd 等事件。

下表概述了每一个 SMTP 协议事件的用途。

SMTP 服务中的协议事件

事件 注释

OnInboundCommand

在 SMTP 协议服务收到 SMTP 命令时发生,从而使事件接收器来得及响应。

OnServerResponse

在 SMTP 服务收到 SMTP 对前一个已发送 SMTP 命令的响应时发生。

OnSessionBegin

在发送 EHLO 命令之前发生。

OnMessageStart

在发送 MAIL FROM 命令之前发生。

OnPerRecipient

在发送 RCPT TO 命令之前发生。

OnBeforeData

在发送 DATA 协议命令之前发生。

OnSessionEnd

在发送 QUIT 命令之前发生。

Exchange Server 2003 安装程序注册 Exchange 特有的 SMTP 协议扩展,以实现下列 SMTP 协议功能:

  • XEXCH50 此功能是通过九个事件接收器来实现的,它支持两台 Exchange Server 服务器之间的完全通信。下表将协议事件与其各自的 XEXCH50 事件接收器对应起来说明。所有 XEXCH50 接收器都在 peexch50.dll 中实现,后者位于 \Program Files\Exchsrvr\bin 目录中。

    XEXCH50 命令的协议扩展

    事件接收器 协议事件 注释

    Exchange SMTP Protocol XEXCH50 Before Data Sink

    OnBeforeData

    通知 XEXCH50 接收器 DATA 协议命令即将发送。XEXCH50 接收器现在能够借此机会请求 SMTP 服务发送 XEXCH50 命令以启动 XEXCH50 通信。

    Exchange SMTP Protocol XEXCH50 Inbound EHLO Sink

    OnInboundCommand

    通知 XEXCH50 接收器 EHLO 命令已收到。

    Exchange SMTP Protocol XEXCH50 Inbound XEXCH50 Sink

    OnInboundCommand

    执行 XEXCH50 命令以启动 XEXCH50 会话。

    Exchange SMTP Protocol XEXCH50 Inbound MAIL Sink

    OnInboundCommand

    在 XEXCH50 会话中执行 MAIL 命令。

    Exchange SMTP Protocol XEXCH50 Inbound RCPT Sink

    OnInboundCommand

    使本地 SMTP 虚拟服务器能够在传入 XEXCH50 通信中接收收件人信息。

    Exchange SMTP Protocol XEXCH50 Per Recipient Event Sink

    OnPerRecipient

    使本地 SMTP 虚拟服务器能够在传出 XEXCH50 通信中发送收件人信息。

    Exchange SMTP Protocol XEXCH50 Ehlo Response Sink

    OnServerResponse

    使本地 SMTP 虚拟服务器能够在 EHLO 命令发送到远程主机之后接收响应。来自远程主机的响应可能指明主机支持 XEXCH50 通信。Exchange 在返回给连接主机的支持命令列表中包含 XEXCH50(图 6.14)。

    Exchange SMTP Protocol XEXCH50 Response Sink

    OnServerResponse

    使本地 SMTP 虚拟服务器能够接收对之前发出的出站 XEXCH50 命令的响应。例如,如果本地 SMTP 服务在事先未经过身份验证的情况下就发出 XEXCH50 命令,则远程服务器可能作出如下响应:504 Need to authenticate first。

    Exchange SMTP Protocol XEXCH50 RCPT Response Sink

    OnServerResponse

    使本地 SMTP 虚拟服务器能够从每个收件人的远程 Exchange 服务器(由出站 RCPT 命令指定)中接收状态信息。收件人地址的格式可能不正确,或者服务器可能无法进行中继。如果收件人信息正确,远程 SMTP 虚拟服务器会将地址重新显示给本地 SMTP 服务,并提供状态信息,例如:250 2.1.5 administrator@tailspintoys.com。

  • X-LINK2STATE 此功能是通过五个事件接收器来实现的。但是,从下表中能够看出来,其中一个事件接收器用于两个独立的事件。所有 X-LINK2STATE 事件接收器都是在位于 \Program Files\Exchsrvr\bin 目录的 Xlsasink.dll 中实现的。

    X-LINK2STATE 命令的协议扩展

    事件接收器 协议事件 注释

    EHLO Inbound Command Handler Sink for XLSA

    OnInboundCommand

    通知 X-LINK2STATE 事件接收器收到了传入的 EHLO 命令。

    X-LSA Inbound Command Handler Sink

    OnInboundCommand

    通知 X-LINK2STATE 事件接收器收到了传入的 X-LINK2STATE 命令。

    X-LSA Sink

    OnMessageStart、OnSessionEnd

    指示出站 X-LINK2STATE 通信的开始(MAIL 命令)和结束(QUIT 命令)。由于远程 SMTP 虚拟服务器是所发送的 Orginfo 数据包的最终接收方,因此不需要在出站 RCPT 命令中指定接收方。此事件接收器传送链路状态信息。

    X-LSA Response Handler Sink

    OnServerResponse

    响应传入的 X-LINK2STATE 命令,该命令包含有关如何传送链路状态信息的信息。例如,200 LAST CHUNK={00000029} MULTI (5) ({00000010} DONE_RESPONSE),该响应指示此 SMTP 虚拟服务器发送的最后一个数据块。

    EHLO Response Handler Sink for X-LSA

    OnServerResponse

    通过在服务器响应中列出 X-LINK2STATE 命令来响应传入的 EHLO 命令。

  • X-EXPS 此功能是通过表 6.13 中列出的五个事件接收器来实现的。所有协议安全性扩展都在位于 \Program Files\Exchsrvr\bin 目录的 Exps.dll 中实现。

    X-EXPS 协议安全扩展

    事件接收器 协议事件 注释

    Exchange SMTP Protocol Security EXPS-EOD Sink

    OnInboundCommand

    指示数据传输结束 ( _EOD)。

    Exchange SMTP Protocol Security EXPS-Aux Sink

    OnInboundCommand

    指示有传入的 AUTH 命令。

    Exchange SMTP Protocol Security EHLO Sink

    OnInboundCommand、OnServerResponse

    指示有传入的 EHLO 命令,并通过在服务器响应中列出 X-EXPS 命令来响应 EHLO。

    Exchange SMTP Protocol Security Mail Sink

    OnInboundCommand、OnServerResponse、OnMessageStart

    指示数据传输开始。此事件接收器是为所有相关的 MAIL 命令方案而实现的。此事件接收器处理以下事件:提示传入 MAIL 命令的事件、响应传入 MAIL 命令的事件和可发出出站 MAIL 命令的事件。

    Exchange SMTP Protocol Security EXPS Sink

    OnInboundCommand、OnServerResponse、OnSessionStart

    指示 X-EXPS 会话开始。此事件接收器是为所有相关的 X-EXPS 命令方案而实现的。此事件接收器处理以下事件:提示传入 X-EXPS 命令的事件、响应传入 X-EXPS 命令的事件、和可发出出站 X-EXPS 命令的事件。

  • SPAM 控制 此功能是通过可处理传入 SMTP 连接上的发件人信息和收件人信息的三个事件接收器实现的,如下表所示。垃圾邮件控制事件接收器在位于 \Program Files\Exchsrvr\bin 目录的 Turflist.dll 中实现。

    垃圾邮件控制 SMTP 扩展

    事件接收器 协议事件 注释

    RCPT Inbound Command Handler Sink

    OnInboundCommand

    指示包含应检查收件人地址的入站 RCPT 命令。

    MAIL Inbound Command Handler Sink for TURF

    OnInboundCommand

    指示包含应检查发件人地址的入站 MAIL 命令。

    EOD Inbound Command Handler Sink

    OnInboundCommand

    指示入站 _EOD 命令。

有关 SMTP 的完整信息,请参阅 SMTP Server(SMTP 服务器)。

 
显示: