Share via


SMTP 通訊協定延伸

 

上次修改主題的時間: 2006-11-03

進階佇列引擎不是 SMTP 服務中唯一的 COM 事件發送程式。SMTP 通訊協定引擎也是 COM 事件 (特別是 SMTP 通訊協定事件) 的主要發送程式。核心 SMTP 通訊協定引擎負責所有的標準 SMTP 通訊,並控制大部份的標準 SMTP 服務延伸 (亦即延伸簡易郵件傳送通訊協定 (ESMTP) 標準,如 RFC 821 及 RFC 1869 中所定義)。通訊協定事件可用來修改 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 虛擬伺服器支援 8 位元多用途網際網路郵件延伸標準 (MIME) 郵件。

AUTH、AUTH GSSAPI NTLM LOGIN,以及 AUTH=LOGIN

發出信號,表示本機 SMTP 虛擬伺服器支援 SMTP 驗證服務延伸。AUTH 關鍵字後的其他資訊識別所支援的驗證機制。

BDAT、CHUNKING

可替代 DATA 命令,佔用 2 個引數。SMTP 虛擬伺服器若以 CHUNKING 回應 EHLO 關鍵字,則表示 SMTP 伺服器支援 BDAT 命令,且接受以區塊傳送的郵件。

第一個引數指出二進位資料封包的長度,這樣 SMTP 主機便不需要一直掃描到資料結尾。接收伺服器會計算郵件中的位元組數,如果郵件大小等於 BDAT 命令所傳送的值,則伺服器會假設它已收到所有的郵件資料。第二個引數指出資料封包是否為目前傳輸中的最後一個封包。第二個引數是可選用的。

BINARYMIME

指出如果在 MAIL 命令中使用值為 "BINARYMIME" 的 BODY 參數,則 SMTP 虛擬伺服器可在不進行傳輸編碼的情況下,接受包含二進位資料的郵件。當 SMTP 伺服器接受 BODY 參數值為 BINARYMIME 的 MAIL 命令時,伺服器同意為每個使用 BDAT 命令傳遞的八位元,保留其所有的位元。BINARYMIME SMTP 延伸僅可與 CHUNKING 一起使用。

DATA

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

DSN

ESMTP 命令,啟用傳遞狀態通知 (如要求建議 (RFC) 1891 中所定義的)。

EHLO

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

ENHANCEDSTATUSCODES

指出 SMTP 伺服器提供加強的錯誤狀態碼。所有 SMTP 狀態回應的文字部份 (而不是初始問候語及任何對 HELO 或 EHLO 的回應),都會在前面加上 RFC 1893 中定義的狀態碼。

ETRN

由 SMTP 伺服器傳送,用以要求本機虛擬伺服器針對 ETRN 命令中所指示的網域,傳送所有保留在佇列中的電子郵件。

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 中定義。

TURN

允許遠端主機及本機主機互換角色,並以相反的方向傳送郵件,而無需建立新連線。

VRFY

確認信箱可用於郵件傳遞。例如,VRFY TED 可確認 Ted 的信箱位於本機伺服器上。Exchange 2003 預設雖可使用此命令,但無法確認使用者。伺服器將通知遠端主機,雖然無法確認使用者,但還是可以接受郵件。伺服器回應具有下列格式:252 2.1.5 無法 VRFY 使用者,但將接受 <Ted@TailspinToys.com> 的郵件

XEXCH50

提供在 Exchange Server 2003 伺服器到伺服器的通訊期間,以郵件資料庫編碼格式 (MDBEF) 格式傳送延伸郵件傳輸信封屬性的能力。

X-EXPS GSSAPI NTLM LOGIN, X-EXPS=LOGIN

X-EXPS 是 Exchange 專屬的命令。它與 AUTH 相似,因為它指出執行 Exchange Server 2003 及 Exchange 2000 Server 的伺服器可以使用的驗證方法,如下所示:

  • GSSAPI   一種代表一般安全性服務應用程式發展介面並啟用 Kerberos 驗證的方法。
  • NTLM   一種代表 Windows NT 及 LAN 管理員,並使用 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 命令時會發生此事件。SMTP 通訊協定服務讓事件接收器有機會做出回應。

OnServerResponse

SMTP 服務收到先前傳送之 SMTP 命令的 SMTP 回應時,會發生此事件。

OnSessionBegin

傳送 EHLO 命令之前會發生此事件。

OnMessageStart

傳送 MAIL FROM 命令之前會發生此事件。

OnPerRecipient

傳送 RCPT TO 命令之前會發生此事件。

OnBeforeData

傳送 DATA 通訊協定命令之前會發生此事件。

OnSessionEnd

傳送 QUIT 命令之前會發生此事件。

Exchange 特定的 SMTP 通訊協定延伸

[Exchange Server 2003 安裝程式] 會註冊 Exchange 特定的 SMTP 通訊協定延伸,以提供下列 SMTP 通訊協定功能:

  • XEXCH50   此功能是使用 9 個事件接收器來實作,可支援 2 部 Exchange Server 伺服器之間的完整通訊。下表將通訊協定事件對應至 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 輸入 RCPT 接收器

    OnInboundCommand

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

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

    OnPerRecipient

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

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

    OnServerResponse

    讓本機 SMTP 虛擬伺服器在 EHLO 命令傳送到遠端主機之後接收回應。遠端主機可能會回應可支援 XEXCH50 通訊。此時 Exchange 會在傳回給連線主機的受支援命令清單中加入 XEXCH50 (圖 6.14)。

    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   **此功能是使用 5 個事件接收器來實作。不過,1 個事件接收器可接收 2 種不同的事件,如下表所示。所有的 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 命令)。因為 Orginfo 封包所要傳送到的最終收件者是遠端 SMTP 虛擬伺服器,所以無需在輸出 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   這些功能是使用 5 個事件接收器來實作,如下表所示。所有的通訊協定安全性延伸都是透過 \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

    發出信號,表示傳入 EHLO 命令,並藉由在伺服器回應中列出 X-EXPS 命令來回應 EHLO。

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

    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 連線上的寄件者及收件者資訊,如下表所示。垃圾郵件控制事件接收器是以 Turflist.dll (位於 \Program Files\Exchsrvr\bin 目錄) 的形式實作。

    垃圾郵件控制 SMTP 延伸

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

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

    OnInboundCommand

    發出信號,表示輸入 RCPT 命令中的收件者地址需要檢查。

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

    OnInboundCommand

    發出信號,表示輸入 MAIL 命令中的寄件者地址需要檢查。

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

    OnInboundCommand

    發出信號,表示有傳入 _EOD 命令。

相關資訊

如需 SMTP 的完整資訊,請參閱<SMTP 伺服器>(英文)。