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 更有效率地進行通訊。

您可以使用 Telnet 連接至您 SMTP 虛擬伺服器的 TCP 通訊埠,以驗證 Exchange Server 2007 的延伸 SMTP 命令是否已載入。當您提交 EHLO 命令以初始化 ESMTP 連線時,伺服器回應會指出 SMTP 虛擬伺服器所支援的功能。當您提交 HELP 命令時,畫面上會列出標準命令。

下表說明 Exchange 的延伸 SMTP 服務所支援的 SMTP 功能。

Exchange Server 2007 所支援的 SMTP 功能

SMTP 伺服器回應 註解

8BITMIME

指出本機 SMTP 虛擬伺服器支援 8 位元多用途網際網路郵件延伸標準 (MIME) 郵件。

AUTH、AUTH GSSAPI NTLM LOGIN 與 AUTH=LOGIN

指出本機 SMTP 虛擬伺服器支援 SMTP 驗證服務延伸。AUTH 關鍵字後的附加資訊代表支援的驗證機制。

BDAT、CHUNKING

DATA 命令的替代項目,會使用兩個引數。當 SMTP 虛擬伺服器以 CHUNKING 回應來回應 EHLO 命令時,SMTP 伺服器會指出它支援 BDAT 命令,並且會接受以區塊分割的郵件。

第一個引數會指出二進位資料封包的長度,讓 SMTP 主機無須持續掃描資料的結尾處。接收端伺服器會計算郵件中的位元組數,而在郵件大小等於 BDAT 命令所傳送的值時,伺服器即會假設它已接收所有的郵件資料。第二個引數會指出某個資料封包是否為現行傳輸中的最後一個封包。第二個引數是選用的。

BINARYMIME

指出 SMTP 虛擬伺服器接受含有二進位內容、但其中不具傳輸編碼的郵件。這些郵件必須同時使用包含 BINARYMIME 值的 BODY 參數,以及 MAIL 命令。當 SMTP 伺服器收到 MAIL 命令,且其中含有 BINARYMIME 的 BODY 參數時,伺服器即會同意將使用 BDAT 命令傳遞的每個八位元資料組中的所有位元保存下來。BINARYMIME SMTP 延伸只能與 CHUNKING 搭配使用。

DATA

由遠端主機所傳送,用以初始化郵件內容的傳輸。

DSN

一項 ESMTP 命令,可發出要求建議 (RFC) 1891 中所定義的傳遞狀態通知。

EHLO

由用戶端所傳送,用以指出 ESMTP 工作階段的開始。伺服器可在其對 EHLO 的回應中,識別它對 ESMTP 命令的支援。

HELO

由用戶端所傳送,用以識別其本身 (通常使用網域名稱),以及指出標準 SMTP 工作階段的開始。

HELP

傳回標準 SMTP 工作階段 (相對於 ESMTP 工作階段) 中的 SMTP 虛擬伺服器所支援的 SMTP 命令清單。

MAIL

識別郵件的寄件者,藉以識別郵件傳輸的開始;其使用形式為 MAIL FROM。

PIPELINING

提供直接傳送命令資料流,而無須等待每個命令予以回應的能力。

QUIT

指出標準或延伸 SMTP 工作階段的結束。

RCPT

識別郵件收件者;其使用形式為 RCPT TO。

RSET

將整個郵件交易設為空值,以及重設緩衝區。

SIZE

提供可讓 SMTP 虛擬伺服器據以指定最大支援郵件大小的機制。相容伺服器必須提供大小延伸,以指定可接受的最大郵件大小。遠端主機所傳送的郵件不應超過此伺服器所指定的大小。

STARTTLS

指出 SMTP 伺服器支援透過傳輸層安全性 (TLS) 的安全 SMTP。透過 TLS 的安全 SMTP 所適用的 SMTP 服務延伸,定義於 RFC 2487 中。

VRFY

驗證信箱是否可用於郵件傳遞。例如,VRFY TED 可驗證 Ted 的某個信箱是否位於本機伺服器上。此命令依預設可用於 Exchange 2007 中,但無法驗證每位使用者。即便無法驗證使用者,伺服器仍會對遠端主機表示郵件將被接受。伺服器回應的格式如下:252 2.1.5 無法 VRFY 使用者,但將接受 Ted@wingtiptoys.com 的郵件

XEXCH50

提供在 Exchange 2007 伺服器對等式通訊期間,以郵件資料庫編碼格式 (MDBEF) 的格式傳送延伸郵件傳輸信封內容的能力。

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

X-EXPS 命令是 Exchange 的專屬命令。此命令與 AUTH 類似,因為它會指定執行 Exchange 2007、Exchange 2003 與 Exchange 2000 的伺服器在進行驗證時可使用的方法,如下所示:

GSSAPI   一種代表一般安全性服務應用軟體程式設計介面,並且可讓使用者透過 Kerberos 進行驗證的方法。

NTLM   一種代表 Windows NT 與 LAN Manager,並且可讓使用者透過 Windows NT 挑戰/回應通訊協定進行驗證的方法。

LOGIN   一種代表 AUTH LOGIN 的方法,此為使用 Base-64 編碼之使用者名稱與密碼的純文字驗證方法。

X-LINK2STATE

為 SMTP 服務新增連結狀態傳播的支援。若想進一步瞭解路由群組之中與之間用以傳播連結狀態資訊的連結狀態演算法,請參閱郵件路由架構 (英文)。

note附註:
所有 Exchange 的特定 SMTP 命令都會以 "X-" 開頭 (不含引號)。若這些命令未列於您 SMTP 虛擬伺服器的 EHLO 回應中,表示伺服器所執行的是 SMTP 服務的 Windows Server 版本。若是如此,您就必須重新安裝 Exchange Server 2007 與任何 Service Pack。

通訊協定事件類別

SMTP 通訊協定引擎會觸發通訊協定事件,以控制主機之間的通訊。透過 SMTP 進行此類通訊時,會產生三種主要的事件類型:

  • SMTP 服務接收 SMTP 命令

    當遠端 SMTP 主機或用戶端傳送 HELO 或 EHLO 命令以連接至本機 SMTP 服務並建立工作階段時,即會發生這些事件。此類別的事件屬於輸入連線上的 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 的特定 SMTP 通訊協定延伸

Exchange Server 2007 安裝程式會針對下列 SMTP 通訊協定功能註冊 Exchange 的特定 SMTP 通訊協定延伸。

XEXCH50

XEXCH50 是用以轉送特定郵件內容 (如郵件的信封與收件者等內容) 的 Exchange ESMTP 延伸。XEXCH50 命令是一種短命令。接收到成功類型回應的 XEXCH50 命令,其後為變數大小的二進位大型物件 (BLOB)。(此大小對應於 XEXCH50 命令的第一個引數。)

此功能須透過 9 個事件接收器來執行,以支援兩部執行 Exchange 之伺服器之間的完整通訊。以下是通訊協定事件及其 XEXCH50 事件接收器的對應表。所有 XEXCH50 接收器皆執行於 Peexch50.dll 中;此檔案位於 Program Files\Exchsrvr\bin 目錄中。

XEXCH50 命令的通訊協定延伸

事件接收器 通訊協定事件 註解

Exchange SMTP 通訊協定 XEXCH50 在資料接收器前

OnBeforeData

通知 XEXCH50 接收器,DATA 通訊協定命令即將傳輸。XEXCH50 接收器可於此時要求 SMTP 服務改為傳送 XEXCH50 命令,以啟動 XEXCH50 通訊。

Exchange SMTP 通訊協定 XEXCH50 輸入 EHLO 接收器

OnInboundCommand

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

Exchange SMTP 通訊協定 XEXCH50 輸入 XEXCH50 接收器

OnInboundCommand

執行 XEXCH50 命令以啟動 XEXCH50 交談。

Exchange SMTP 通訊協定 XEXCH50 輸入 MAIL 接收器

OnInboundCommand

在 XEXCH50 交談中執行 MAIL 命令。

Exchange SMTP 通訊協定 XEXCH50 輸入 MAIL 接收器

OnInboundCommand

讓本機 SMTP 虛擬伺服器可接收輸入 XEXCH50 通訊中的收件者資訊。

Exchange SMTP 通訊協定 XEXCH50 每個收件者事件接收器

OnPerRecipient

讓本機 SMTP 虛擬伺服器可傳送輸出 XEXCH50 通訊中的收件者資訊。

Exchange SMTP 通訊協定 XEXCH50 EHLO 回應接收器

OnServerResponse

讓本機 SMTP 虛擬伺服器可在 EHLO 命令傳送至遠端主機後接收回應。來自遠端主機的回應可能會指出它支援 XEXCH50 通訊。Exchange 包含回傳給連線主機之支援命令清單中的 XEXCH50。

Exchange SMTP 通訊協定 XEXCH50 回應接收器

OnServerResponse

讓本機 SMTP 虛擬伺服器可接收先前發出的輸出 XEXCH50 命令所產生的回應。例如,若本機 SMTP 服務在未先行驗證的情況下發出了 XEXCH50 命令,遠端伺服器的回應將是:504 必須先進行驗證。

Exchange SMTP 通訊協定 XEXCH50 RCPT 回應接收器

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 命令與回應的實際大小。

此功能是透過五部事件接收器來執行。但是,有一部事件接收器會用於兩個不同的事件,如下表所示。所有的 X-LINK2STATE 事件接收器皆執行於 \Program Files\Exchsrvr\bin 目錄下的 Xlsasink.dll 中。

X-LINK2STATE 命令的通訊協定延伸

事件接收器 通訊協定事件 註解

XLSA 的 EHLO 輸入命令處理常式接收器

OnInboundCommand

通知 X-LINK2STATE 事件接收器已接收輸入 EHLO 命令。

X-LSA 輸入命令處理常式接收器

OnInboundCommand

通知 X-LINK2STATE 事件接收器已接收輸入 X-LINK2STATE 命令。

X-LSA 接收器

OnMessageStart、OnSessionEnd

指出輸出 X-LINK2STATE 通訊的開始 (MAIL 命令) 與結束 (QUIT 命令)。由於遠端 SMTP 虛擬伺服器是要傳輸之 Orginfo 封包的最終收件者,因此無須在輸出 RCPT 命令中指定收件者。此事件接收器會傳輸連結狀態資訊。

X-LSA 回應處理常式接收器

OnServerResponse

以如何傳輸連結狀態資訊的相關資訊,回應輸入 X-LINK2STATE 命令。回應的範例如下:200 LAST CHUNK={00000029} MULTI (5) ({00000010} DONE_RESPONSE),這表示此 SMTP 虛擬伺服器所傳送的最後一個資料區塊。

X-LSA 的 EHLO 回應處理常式接收器

OnServerResponse

在伺服器回應中列出 X-LINK2STATE 命令,以回應輸入 EHLO 命令

X-EXPS

X-EXPS 是 Exchange 專屬的動詞,雖然它與 AUTH 類似。資料區塊沒有大小上限,交換的資料區塊數也沒有上限。資料命令與回應的語法取決於您所選取的 AUTH 套件,如 LOGIN、NTLM、GSSAPI 等等。如需相關資訊,請參閱 AUTH RFC。

雖然 EXPS 是 Exchange 通訊協定安全性的意思,但 SMTP 是其唯一參照的通訊協定。Exchange 2000 Server 與 Exchange Server 2003 中所使用的某些動詞僅專屬於這些產品,且必須與 ESMTP 動詞搭配使用。這些動詞統稱為 ESMTP X 動詞。

這些功能是使用五部事件接收器來執行,如下表所列。所有的通訊協定安全性延伸皆執行於 Program Files\Exchsrvr\bin 目錄下的 Exps.dll 中。

X-EXPS 通訊協定安全性延伸

事件接收器 通訊協定事件 註解

Exchange SMTP 通訊協定安全性 EXPS-EOD 接收器

OnInboundCommand

指出資料傳輸的結束 ( _EOD)。

Exchange SMTP 通訊協定安全性 EXPS-Aux 接收器

OnInboundCommand

指出輸入 AUTH 命令。

Exchange SMTP 通訊協定安全性 EHLO 接收器

OnInboundCommand、OnServerResponse

在伺服器回應中列出 X-EXPS 命令,以指出輸入 EHLO 命令與 EHLO 的回應。

Exchange SMTP 通訊協定安全性郵件接收器

OnInboundCommand、OnServerResponse、OnMessageStart

指出資料傳輸的開始。此事件接收器可對所有相關的 MAIL 命令案例執行。此事件接收器會處理指出輸入 MAIL 命令的事件、回應輸入 MAIL 命令,然後發出輸出 MAIL 命令。

Exchange SMTP 通訊協定安全性 EXPS 接收器

OnInboundCommand、OnServerResponse、OnSessionStart

指出 X-EXPS 工作階段的開始。此事件接收器可對所有相關的 X-EXPS 命令案例執行。此事件接收器會處理指出輸入 X-EXPS 命令的事件、回應輸入 X-EXPS 命令,並且可發出輸出 X-EXPS 命令。

SPAM 控制

此功能可使用三部用以處理輸入 SMTP 連線之寄件者與收件者資訊的事件接收器來執行,如下表所列。垃圾郵件控制事件接收器執行於 Program Files\Exchsrvr\bin 目錄下的 Turflist.dll 中。

垃圾郵件控制 SMTP 延伸

事件接收器 通訊協定事件 註解

RCPT 輸入命令處理常式接收器

OnInboundCommand

指出應檢查收件者地址的輸入 RCPT 命令。

TURF 的 MAIL 輸入命令處理常式接收器

OnInboundCommand

指出應檢查寄件者地址的輸入 MAIL 命令。

EOD 輸入命令處理常式接收器

OnInboundCommand

指出輸入 _EOD 命令。

X-ANONYMOUSTLS

這是 Exchange 2007 的新增參數。此參數可讓使用者選取輸入匿名傳輸層安全性 (TLS) 憑證,或選取輸出匿名傳輸層安全性 (TLS) 憑證。Exchange 會查詢 Active Directory 目錄服務,以擷取伺服器上憑證的指紋。伺服器物件上的 msExchServerInternalTLSCert 屬性會儲存憑證指紋。若無法讀取 msExchServerInternalTLSCert 屬性,或值為 null,則 Exchange 不會在 SMTP 工作階段中通告 X-ANONYMOUSTLS,因而不會載入任何憑證。

XLONGADDR

這是 Exchange 2007 的新增參數。此參數會讓接收連接器接受長的 X.400 電子郵件地址。X.400 電子郵件地址是使用網際網路郵件連接器封裝式位址 (IMCEA) 封裝方法,封裝在 SMTP 電子郵件地址中。

當此參數的值是 $False 時,完整 SMTP 電子郵件地址的最大長度是 571 個字元。

當此參數的值是 $True 時,會進行下列變更:

  • XLONGADDR 關鍵字是在接收連接器的 EHLO 回應中進行通告。

  • 接受的 SMTP 工作階段行長度已增加至 8,000 個字元。

  • MAIL FROM: 及 RCPT TO: SMTP 命令可接受有效的長位址。

因此,在進行 IMCEA 封裝之後,X.400 電子郵件地址的長度最多可以有 1,860 個字元。

此參數的有效輸入範圍是 $True 或 $False。預設值為 $False。您只可以在 Hub Transport Server 上設定的接收連接器上修改此參數。

XRDST

這是 Exchange 2007 的新增參數。此通訊協定延伸可用以將郵件的相關路由目的地傳送至遠端伺服器。若遠端伺服器未通告 XRDST,且要傳送的郵件需要 XRDST 支援,則會在事件日誌中記錄 MSExchangeTransport 事件識別碼 2021。此事件的符號名稱為 tuple_SmtpSendUnableToTransmitRDst。此事件表示郵件無法傳送。

EXPS EXCHANGEAUTH GSSAPI NTLM

這是 Exchange 2007 的新增參數。這是在 X-ANONYMOUSTLS 之後宣告的預設接收連接器服務延伸。

X-EXCHANGEAUTH SHA256

這是 Exchange 2007 的新增參數。這是在 X-ANONYMOUSTLS 之後宣告的預設接收連接器服務延伸。