Exchange Server 2007 的 SMTP 协议扩展

 

适用于: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

上一次修改主题: 2009-09-17

简单邮件传输协议 (SMTP) 引擎是 COM 事件的主调度程序。核心 SMTP 协议引擎负责所有标准 SMTP 通信并处理多数标准 SMTP 服务扩展。具体而言,核心 SMTP 引擎处理征求意见文档 (RFC) 821 和 RFC 1869 中定义的扩展简单邮件传输协议 (ESMTP) 标准。协议事件可用于修改 SMTP 协议,以添加新的 ESMTP 命令或对现有命令的操作进行更改。Exchange Server 2007 使用上述协议事件来实现特定于 Exchange 的扩展 SMTP 命令,以与组织中的其他 Exchange 服务器进行效率高于标准 SMTP 的通信。

可以验证 Exchange Server 2007 的扩展 SMTP 命令是否使用 Telnet 连接到 SMTP 虚拟服务器的 TCP 端口进行加载。在提交 EHLO 命令以启动 ESMTP 连接时,服务器响应指示 SMTP 虚拟服务器支持的功能。在提交 HELP 命令时,列出标准命令。

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

Exchange Server 2007 中支持的 SMTP 功能

SMTP 服务器响应 注释

8BITMIME

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

AUTH、AUTH GSSAPI NTLM LOGIN 和 AUTH=LOGIN

发出信号表示本地 SMTP 虚拟服务器支持 SMTP 身份验证服务扩展。AUTH 关键字后的其他信息可标识支持的身份验证机制。

BDAT, CHUNKING

一种 DATA 命令的替代方式,它采用了两个参数。当 SMTP 虚拟服务器通过 CHUNKING 响应对 EHLO 命令进行响应时,SMTP 服务器会指示其支持 BDAT 命令并将以块接受邮件。

第一个参数表明二进制数据包的长度,以使 SMTP 主机不必为数据末尾进行循环扫描。接收服务器计算邮件的字节数,并且在邮件大小等于 BDAT 命令发送的值时,服务器会假定其收到了所有邮件数据。第二个参数表明数据包是否是当前传输中的最后一个包。第二个参数可选。

BINARYMIME

指示 SMTP 虚拟服务器不用传输编码即可接受包含二进制材料的邮件。这些邮件必须同时使用 BODY 参数(包括 BINARYMIME 值)和 MAIL 命令。当 SMTP 服务器通过 BINARYMIME 的 BODY 参数接受 MAIL 命令时,此服务器同意保留使用 BDAT 命令传递的每个八进制的所有位。BINARYMIME SMTP 扩展只能与 CHUNKING 一起使用。

DATA

通过远程主机发送可启动邮件内容的传输。

DSN

使 ESMTP 命令可以按照征求意见文档 (RFC) 1891 中的定义传递状态通知。

EHLO

通过客户端发送可发出信号表示 ESMTP 会话启动。此服务器可以在其响应 EHLO 后标识其对 ESMTP 命令的支持。

HELO

通过客户端发送可进行自我标识(通常带有域名)并可发出信号表示标准 SMTP 会话启动。

HELP

返回标准 SMTP 会话(而不是 ESMTP 会话)中 SMTP 虚拟服务器支持的 SMTP 命令的列表。

邮件

通过标识邮件发件人来识别邮件传输是否启动;采用 MAIL FROM 格式。

PIPELINING

提供发送命令流的功能,而不必在每个命令之后等待响应。

QUIT

发出信号表示标准或扩展 SMTP 会话终止。

RCPT

标识邮件收件人;采用 RCPT TO 格式。

RSET

置空整个邮件事务并重置缓冲区。

SIZE

提供 SMTP 虚拟服务器可以指示支持的最大邮件大小的机制。兼容服务器必须提供大小扩展以指示可以接受的最大邮件大小。远程主机不应发送大小超过服务器指示的邮件。

STARTTLS

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

VRFY

验证邮箱是否适用于邮件传递。例如:VRFY TED 验证 Ted 的邮件是否位于本地服务器上。默认情况下,此命令在 Exchange 2007 中可用,但不验证用户。此服务器将通知远程主机:虽然无法对用户进行验证,但是会接受邮件。服务器响应采用以下格式:252 2.1.5 无法验证用户,但是会接受 Ted@wingtiptoys.com 的邮件

XEXCH50

提供在 Exchange 2007 服务器到服务器通信期间以邮件数据库编码格式 (MDBEF) 形式发送扩展邮件传输信封属性的功能。

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

X-EXPS 是专用于 Exchange 的命令。与 AUTH 类似,因为 X-EXPS 指示运行 Exchange 2007、Exchange 2003 和 Exchange 2000 的服务器可用于身份验证的方法,如下所示:

GSSAPI   一种代表通用安全服务应用程序编程接口和通过 Kerberos 启用身份验证的方法。

NTLM   一种代表 Windows NT 和 LAN Manager 并使用 Windows NT 质询/响应协议启用身份验证的方法。

LOGIN   一种代表 AUTH LOGIN 并使用 base-64 编码的用户名和密码来清除文本身份验证的方法。

X-LINK2STATE

向 SMTP 服务添加对链接状态传播的支持。有关用于在路由组内和路由组间传播链接状态信息的链接状态算法的详细信息,请参阅 Message Routing Architecture(英文网页)。

note注意:
所有特定于 Exchange 的 SMTP 命令均以“X-”(没有引号)开头。如果这些命令未在 SMTP 虚拟服务器的 EHLO 响应中列出,则此服务器正在运行基于 Windows Server 版本的 SMTP 服务。如果出现这种情况,必须重新安装 Exchange Server 2007 和所有服务包。

协议事件类别

SMTP 协议引擎触发协议事件以控制主机到主机的通信。以下是三种主要事件类型,它们均可以通过 SMTP 在此类通信中发生:

  • SMTP 服务接收 SMTP 命令

    在远程 SMTP 主机或客户端连接到本地 SMTP 服务并通过发送 HELO 命令或 EHLO 命令建立会话时,会发生上述事件。此类别的事件是传入连接上的 SMTP Protocol OnInboundCommand 事件。

  • SMTP 服务接收 SMTP 响应

    在本地 SMTP 服务接收来自远程 SMTP 主机或客户端对出站 SMTP 命令的响应时,会发生上述事件。此类别的事件是出站连接上的 SMTP Protocol OnServerResponse 事件。

  • SMTP 服务发送 SMTP 命令

    在本地 SMTP 服务连接到远程 SMTP 主机并建立会话以传输邮件时,会发生上述事件。此类别的事件是出站连接上的 SMTP Protocol 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 的 SMTP 协议扩展

Exchange Server 2007 安装程序为以下 SMTP 协议功能注册特定于 Exchange 的 SMTP 协议扩展。

XEXCH50

XEXCH50 是用于中继某些邮件属性(如信封邮件和收件人属性)的 Exchange ESMTP 扩展。XEXCH50 命令是短命令。收到成功类型响应的 XEXCH50 命令后面跟随可变大小的二进制大型对象 (BLOB)。(此大小与 XEXCH50 命令的第一个参数对应。)

此功能使用 9 个事件接收器实现,以支持两台运行 Exchange 的服务器之间的完全通信。下表显示了协议事件到其 XEXCH50 事件接收器的映射。所有 XEXCH50 接收器均在位于 Program Files\Exchsrvr\bin 目录下的 Peexch50.dll 中实现。

XEXCH50 命令的协议扩展

事件接收器 协议事件 注释

Exchange SMTP Protocol XEXCH50 Before Data 接收器

OnBeforeData

通知 XEXCH50 接收器即将传输 DATA 协议命令。现在,XEXCH50 接收器有机会要求 SMTP 服务发送 XEXCH50 命令以启动 XEXCH50 通信。

Exchange SMTP Protocol XEXCH50 Inbound EHLO 接收器

OnInboundCommand

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

Exchange SMTP Protocol XEXCH50 Inbound XEXCH50 接收器

OnInboundCommand

实现 XEXCH50 命令以启动 XEXCH50 会话。

Exchange SMTP Protocol XEXCH50 Inbound MAIL 接收器

OnInboundCommand

在 XEXCH50 会话中实现 MAIL 命令。

Exchange SMTP Protocol XEXCH50 Inbound MAIL 接收器

OnInboundCommand

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

Exchange SMTP Protocol XEXCH50 Per Recipient Event 接收器

OnPerRecipient

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

Exchange SMTP Protocol XEXCH50 Ehlo Response 接收器

OnServerResponse

使本地 SMTP 虚拟服务器在 EHLO 命令被发送至远程主机之后可以收到响应。来自远程主机的响应可以指示 XEXCH50 通信的支持。Exchange 在支持的返回至连接主机的命令列表中包含 XEXCH50。

Exchange SMTP Protocol XEXCH50 Response 接收器

OnServerResponse

使本地 SMTP 虚拟服务器可以收到对先前发出的出站 XEXCH50 命令的响应。例如:如果本地 SMTP 服务发出 XEXCH50 命令且未预先进行身份验证,则远程服务器使用“504 首先需要身份验证”进行响应。

Exchange SMTP Protocol XEXCH50 RCPT Response 接收器

OnServerResponse

使本地 SMTP 虚拟服务器可以收到来自使用出站 RCPT 命令指示各收件人的远程 Exchange 服务器的状态信息。可能收件人地址格式错误或者服务器无法中继。如果收件人信息正确,则远程 SMTP 虚拟服务器会反映地址同时返回本地 SMTP 服务和状态信息,如 250 2.1.5 administrator@tailspintoys.com。

X-LINK2STATE

X-LINK2STATE 命令和响应是 SMTP 的特定扩展。此命令专用于 Exchange,针对 Exchange SMTP 服务器之间交换路由拓扑信息。所有 X-LINK2STATE 命令和响应的最大合理大小为 1,024 字节。此大小是 X-LINK2STATE 命令和响应常见的实际大小。

此功能使用 5 个事件接收器实现。但是,一个事件接收器可用于两个独立的事件,如下表中所示。所有 X-LINK2STATE 事件接收器均在 \Program Files\Exchsrvr\bin 目录下的 Xlsasink.dll 中实现。

X-LINK2STATE 命令的协议扩展

事件接收器 协议事件 注释

用于 XLSA 的 EHLO Inbound Command Handler 接收器

OnInboundCommand

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

X-LSA Inbound Command Handler 接收器

OnInboundCommand

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

X-LSA 接收器

OnMessageStart, OnSessionEnd

发出信号表示出站 X-LINK2STATE 通信的启动(MAIL 命令)和终止(QUIT 命令)。因为远程 SMTP 虚拟服务器是正在传输的 Orginfo 包的最终收件人,所以不必在出站 RCPT 命令中指定收件人。此事件接收器传输链接状态信息。

X-LSA Response Handler 接收器

OnServerResponse

使用有关如何传输链接状态信息的信息来响应传入 X-LINK2STATE 命令。响应示例:200 LAST CHUNK={00000029} MULTI (5) ({00000010} DONE_RESPONSE),指示最后的块数据由此 SMTP 虚拟服务器发送。

用于 X-LSA 的 EHLO Response Handler 接收器

OnServerResponse

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

X-EXPS

X-EXPS 是专用于 Exchange 的动词,尽管它与 AUTH 相似。对数据块和交换的数据块数没有最大大小限制。数据命令和响应的语法取决于所选的 AUTH 包,如 LOGIN、NTLM、GSSAPI 等。有关详细信息,请参阅 AUTH RFC。

虽然 EXPS 代表 Exchange 协议安全性,但仅 EXPS 引用的协议是 SMTP。Exchange 2000 Server 和 Exchange Server 2003 中使用的某些动词连同 ESMTP 动词都专用于这些产品。这些动词称为 ESMTP X 动词。

这些功能使用 5 个事件接收器实现,如下表所示。所有协议安全性扩展均在 Program Files\Exchsrvr\bin 目录下的 Exps.dll 中实现。

X-EXPS 协议安全性扩展

事件接收器 协议事件 注释

Exchange SMTP Protocol Security EXPS-EOD 接收器

OnInboundCommand

发出信号表示数据传输的终止 ( _EOD)。

Exchange SMTP Protocol Security EXPS-Aux 接收器

OnInboundCommand

发出信号表示传入 AUTH 命令。

Exchange SMTP Protocol Security EHLO 接收器

OnInboundCommand, OnServerResponse

通过在服务器响应中列出 X-EXPS 命令来发出信号表示传入 EHLO 命令。

Exchange SMTP Protocol Security Mail 接收器

OnInboundCommand, OnServerResponse, OnMessageStart

指示数据传输的启动。所有相关 MAIL 命令方案实现了此事件接收器。此事件接收器处理发出信号表示传入 MAIL 命令、响应传入 MAIL 命令和发出出站 MAIL 命令的事件。

Exchange SMTP Protocol Security EXPS 接收器

OnInboundCommand, OnServerResponse, OnSessionStart

指示 X-EXPS 会话的启动。所有相关 X-EXPS 命令方案实现了此事件接收器。此事件接收器处理发出信号表示传入 X-EXPS 命令、响应传入 X-EXPS 命令和发出出站 X-EXPS 命令的事件。

垃圾邮件控件

使用 3 个在传入 SMTP 连接上处理发件人和收件人信息的事件接收器实现此功能,如下表所示。垃圾邮件控件事件接收器在 Program Files\Exchsrvr\bin 目录下的 Turflist.dll 中实现。

垃圾邮件控件 SMTP 扩展

事件接收器 协议事件 注释

RCPT Inbound Command Handler 接收器

OnInboundCommand

使用应检查的收件人地址发出信号表示入站 RCPT 命令。

用于 TURF 的 MAIL Inbound Command Handler 接收器

OnInboundCommand

使用应检查的发件人地址发出信号表示入站 MAIL 命令。

EOD Inbound Command Handler 接收器

OnInboundCommand

发出信号表示入站 _EOD 命令。

X-ANONYMOUSTLS

此参数是 Exchange 2007 新增的。此参数启用了入站匿名传输层安全性 (TLS) 证书的选择或出站匿名传输层安全性 (TLS) 证书的选择。Exchange 查询 Active Directory 目录服务以检索服务器上证书的指纹。服务器对象上的 msExchServerInternalTLSCert 属性存储证书指纹。如果无法读取 msExchServerInternalTLSCert 属性或值为空,则 Exchange 不在 SMTP 会话中公布 X-ANONYMOUSTLS 且不加载任何证书。

XLONGADDR

此参数是 Exchange 2007 新增的。此参数使接收连接器能够接受长 X.400 电子邮件地址。X.400 电子邮件地址使用 Internet Mail Connector Encapsulated Address (IMCEA) 封装方法封装在 SMTP 电子邮件地址中。

在此参数值为 $False 时,完整 SMTP 电子邮件地址的最大长度为 571 个字符。

在此参数值为 $True 时,将进行以下更改:

  • XLONGADDR 关键字将在接收连接器的 EHLO 响应中公布。

  • SMTP 会话的接受的行长度增加到 8,000 个字符。

  • 有效长地址由 MAIL FROM: 和 RCPT TO: SMTP 命令接受。

因此,X.400 电子邮件地址在经过 IMCEA 封装后可长达 1,860 个字符。

此参数的有效输入范围为 $True 或 $False。默认值为 $False。仅可以在配置在集线器传输服务器上的接收连接器上修改此参数。

XRDST

此参数是 Exchange 2007 新增的。此协议扩展用于将与邮件关联的路由目标通信至远程服务器。如果远程服务器不公布 XRDST 且要发送的邮件需要 XRDST 支持,则将 MSExchangeTransport 事件 ID 2021 记录到事件日志中。此事件的符号名称为 tuple_SmtpSendUnableToTransmitRDst。此事件指示邮件无法发送。

EXPS EXCHANGEAUTH GSSAPI NTLM

此参数是 Exchange 2007 新增的。此参数是在 X-ANONYMOUSTLS 之后公布的 Default Receive 连接器服务扩展。

X-EXCHANGEAUTH SHA256

此参数是 Exchange 2007 新增的。此参数是在 X-ANONYMOUSTLS 之后公布的 Default Receive 连接器服务扩展。