分类: WINDOWS
2018-07-12 20:32:26
高级排队引擎不是 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 命令时,将列出标准命令。
下表说明了 Exchange 扩展的 SMTP 服务所支持的 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 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 |
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 的服务器使用的身份验证方法,具体的验证方法如下所述:
|
X-LINK2STATE |
将链路状态传播支持添加到 SMTP 服务中。有关在路由组之中和路由组之间用来传播链路状态信息的链路状态算法的详细信息,请参阅。 |
注意: |
---|
所有 Exchange 特有的 SMTP 命令都以“X”(不包括引号)开头。如果这些命令未在 SMTP 虚拟服务器的 EHLO 响应中列出,则说明服务器运行的是 Windows Server 2003 基础版 SMTP 服务。在这种情况下,必须重新安装 Exchange Server 2003 及所有 Service Pack。 |
SMTP 协议引擎触发协议事件,以控制主机对主机的通信。在通过 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 协议功能:
事件接收器 | 协议事件 | 注释 |
---|---|---|
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。 |
事件接收器 | 协议事件 | 注释 |
---|---|---|
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 命令。 |
事件接收器 | 协议事件 | 注释 |
---|---|---|
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 命令的事件。 |
事件接收器 | 协议事件 | 注释 |
---|---|---|
RCPT Inbound Command Handler Sink |
OnInboundCommand |
指示包含应检查收件人地址的入站 RCPT 命令。 |
MAIL Inbound Command Handler Sink for TURF |
OnInboundCommand |
指示包含应检查发件人地址的入站 MAIL 命令。 |
EOD Inbound Command Handler Sink |
OnInboundCommand |
指示入站 _EOD 命令。 |