Sun Java System Messaging Server 6 2005Q4 管理指南

SMTP 指令和協定支援

可以指定 SMTP 通道是否支援某些 SMTP 指令 (例如 EHLO、ETRN、EXPN 和 VRFY)。還可以指定該通道是否支援 DNS 網域驗證、該通道接受哪些字元作為行終止符號等。本節描述以下內容:

表 12–21 概括本小節所說明的關鍵字。

表 12–21 SMTP 指令和協定關鍵字

通道關鍵字 

說明 

協定選取和行終止符號

指定通道是否支援 SMTP 協定,並指定接受做為行終止符號的字元序列

smtp

支援 SMTP 協定。關鍵字 smtp 對於所有 SMTP 通道都具有強制性。(此關鍵字相當於 smtp_crorlf。)

nosmtp

不支援 SMTP 協定。這是預設。 

smtp_cr

接受以換行鍵 (CR) 終止但後面沒有換行 (LF) 的行。 

smtp_crlf

行必須以換行鍵 (CR) 換行 (LF) 序列終止。 

smtp_lf

接受以換行 (LF) 終止但前面沒有的行 (CR)。 

smtp_crorlf

行能以換行鍵 (CR)、換行 (LF) 序列或完整的 CRLF 終止。 

EHLO 關鍵字

指定通道處理 EHLO 指令的方式

ehlo

對初始連線使用 SMTP EHLO 指令。 

checkehlo

檢查 SMTP 回應大標題以確定是使用 EHLO 還是 HELO。 

noehlo

不使用 EHLO 指令。 

ETRN 關鍵字

指定通道處理 ETRN 指令 (請求處理佇列) 的方式

allowetrn

接受 ETRN 指令。 

blocketrn

封鎖 ETRN 指令。 

domainetrn

僅接受那些 ETRN 指定網域的指令。 

silentetrn

接受 ETRN 指令但不回應通道資訊。 

sendetrn

傳送 ETRN 指令。 

nosendetrn

不傳送 ETRN 指令。 

VRFY 關鍵字

指定通道處理 VRFY 指令的方式

domainvrfy

使用完整的位址發出 VRFY 指令。 

localvrfy

使用本機位址發出 VRFY 指令。 

novrfy

不發出 VRFY 指令。 

vrfyallow

對 VRFY 指令提供資訊回應。 

vrfydefault

根據通道的 HIDE_VERIFY 選項設定,提供 VRFY 指令的預設回應。 

vrfyhide

對 SMTP VRFY 指令提供模糊回應。 

EXPN 關鍵字

指定通道處理 EXPN 關鍵字的方式 

expnallow

允許 EXPN,即使已在 SMTP 伺服器層級使用 DISABLE_EXPAND SMTP 通道選項將其停用。

expndisable

無條件停用 EXPN

expndefault

如果 SMTP 伺服器設定為允許 EXPN,則允許。(預設)

DNS 網域驗證

指定通道是否執行 DNS 網域驗證

mailfromdnsverify

驗證用於 MAIL FROM: 指令的網域是否存在於 DNS 中。

nomailfromdnsverify

不驗證用於 MAIL FROM: 指令的網域是否存在於 DNS 中。

字元集和八位元資料

指定通道處理八位元資料的方式 (注意:雖然這些關鍵字通常用於 SMTP 通道,但也可能與任何類型的通道相關。)

charset7

與 7 位元文字郵件關聯的預設字元集 

charset8

與 8 位元文字郵件關聯的預設字元集 

charsetesc

與包含退出字元的 7 位元文字關聯的預設字元集 

eightbit

通道支援八位元字元。 

eightnegotiate

如有可能,通道應協商使用八位元傳輸。 

eightstrict

通道應拒絕標頭包含非法八位元資料的郵件。 

sevenbit

通道不支援八位元字元;八位元字元必須經過編碼。 

協定串流

指定通道使用的協定串流之程度。

streaming

控制在與通道關聯的協定中使用的協定串流之程度。 

通道協定選取和行終止符號

關鍵字:smtpnosmtpsmtp_crlfsmtp_crsmtp_crorlfsmtp_lf

smtpnosmtp 關鍵字指定通道是否支援 SMTP 協定。smtp 關鍵字或其變化形式之一,對於所有 SMTP 通道都具有強制性。

關鍵字 smtp_crlfsmtp_crsmtp_crorlfsmtp_lf 可用於 SMTP 通道,指定 MTA 將接受做為行終止符號的字元序列。關鍵字 smtp_crlf 表示行必須以換行鍵 (CR) 換行 (LF) 序列終止。關鍵字 smtp_lfsmtp 表示接受前面沒有 CR 的 LF。最後,smtp_cr 表示接受後面沒有 LF 的 CR。這些選項僅影響內送郵件之處理。

由於 SMTP 標準需要 CRLF 以作為行終止符號,因此 MTA 始終會產生標準 CRLF 序列。各種 smtp 關鍵字僅控制 MTA 是否接受其他非標準的行終止符號。例如,如果要 MTA 僅接受完全合法的 SMTP 郵件並拒絕所有包含非標準行終止符號的郵件,則可以指定 smtp_crlf

EHLO 指令支援

關鍵字:ehlonoehlocheckehlo

SMTP 協定已延伸 (RFC 1869) 為允許協商其他指令。使用新的 EHLO 指令便可達此目的,該指令取代了 RFC 821 的 HELO 指令。延伸的 SMTP 伺服器透過提供其支援的延伸清單來回應 EHLO。未延伸的伺服器則會傳回不明的指令錯誤,然後用戶端會傳送舊的 HELO 指令。

退回策略通常可與延伸的以及未延伸的伺服器正常配合工作。但是如果伺服器未根據實作,則會發生問題。具體來說,曾經有某些不符合的伺服器在接收未知指令時中斷連線。

SMTP 用戶端會實作一種策略,如果任一伺服器在接收 EHLO 時中斷連線,SMTP 用戶端便會藉此策略嘗試重新連線並使用 HELO 。但是,如果遠端伺服器在接收 EHLO 時,不僅中斷連線,還處於問題狀態,則此策略可能無法奏效。

通道關鍵字 ehlonoehlocheckehlo 可用於處理此類情況。ehlo 關鍵字告知 MTA 在嘗試所有的初始連線時,使用 EHLO 指令。noehlo 關鍵字可完全停用 EHLO 指令。checkehlo 關鍵字測試由遠端 SMTP 伺服器傳回的回應大標題中有無字串「ESMTP」。如果發現此字串,則使用 EHLO;如果未發現,則使用 HELO。預設運作方式是在嘗試所有初始連線時使用 EHLO,除非大標題行包含字串「fire away」(在此情況下使用 HELO);請注意,由於此預設運作方式介於 ehlocheckehlo 關鍵字產生的運作方式之間,因此沒有對應於此預設運作方式的關鍵字。

ETRN 指令支援

關鍵字:allowetrnblocketrndisableetrndomainetrnsilentetrnsendetrnnosendetrnnovrfy

ETRN 指令在 RFC 1985 中定義,可提供 SMTP 服務的延伸,藉此,SMTP 用戶端與伺服器可以互動,使伺服器可以處理其要傳送至給定主機之郵件的佇列。

使用 ETRN,SMTP 用戶端可以請求遠端 SMTP 伺服器啟動對預定要傳送至 SMTP 用戶端的郵件佇列的處理。因此,ETRN 可提供一種實作遠端 SMTP 系統「輪詢」的方法,以便郵件內送至自己的系統。這對於彼此之間只有暫態連線的系統很有用,例如,作為其他站點之次要郵件交換 (MX) 主機而設定的站點與網際網路之間僅有撥接連線。透過啟用此指令,可允許遠端 (可能是撥接) 伺服器請求遞送它們的郵件。

SMTP 用戶端在 ETRN 指令行中指定郵件要傳送到的系統之名稱 (通常是 SMTP 用戶端系統自己的名稱)。如果遠端 SMTP 伺服器支援 ETRN 指令,它將觸發獨立程序的執行,以連線回已命名的系統,並為該系統傳送正等候傳送的所有郵件。

回應 ETRN 指令

allowetrnblocketrndomainetrnsilentetrn 關鍵字可控制傳送 SMTP 用戶端發出 ETRN 指令以請求 MTA 嘗試傳送 MTA 佇列中的郵件時 MTA 的回應。

依預設,MTA 將嘗試允許所有 ETRN 指令;亦即啟用 allowetrn 關鍵字。可以在通道定義中包含 blocketrn 關鍵字,從而指定 MTA 不允許 ETRN 指令。

可以包含 silentetrn 關鍵字,從而指定 MTA 允許所有 ETRN 指令,但不回應與網域相符的且 MTA 將嘗試執行的通道之名稱。domainetrn 關鍵字指定 MTA 僅接受用於指定網域的 ETRN 指令;它也會使 MTA 不回應網域相符的且 MTA 將嘗試執行的通道之名稱。

disableetrn 可完全停用對 ETRN 指令的支援;SMTP 伺服器不會將 ETRN 做為支援的指令進行通告。

傳送 ETRN 指令

sendetrnnosendetrn 通道關鍵字可控制 MTA 在開始 SMTP 連線時是否傳送 ETRN 指令。預設是 nosendetrn,表示 MTA 不傳送 ETRN 指令。如果遠端 SMTP 伺服器表示支援 ETRNsendetrn 關鍵字即會告知 MTA 傳送 ETRN 指令。sendetrn 關鍵字後面應加上請求其郵件接收傳送嘗試的系統之名稱。

VRFY 指令支援

關鍵字:domainvrfylocalvrfyvrfyallowvrfydefaultvrfyhide

VRFY 指令可讓 SMTP 用戶端傳送請求至 SMTP 伺服器,請求驗證該伺服器上特定使用者名稱的郵件。VRFY 指令在 RFC 821 中定義。

伺服器傳送回應指示該使用者是否位於本機、郵件是否將被轉寄等。250 回應指示使用者名稱位於本機,251 回應指示使用者名稱不在本機,但伺服器可轉寄該郵件。伺服器回應中包含電子信箱名稱。

傳送 VRFY 指令

一般情況下,沒有必要發出 VRFY 指令做為 SMTP 對話的一部分。SMTP RCPT TO 指令執行的功能應與 VRFY 所執行的功能相同,並傳回相應的錯誤。但是,有些伺服器可以接受 RCPT TO 中的任何位址 (並在以後退回),而這些伺服器會執行更廣泛的檢查來做為 VRFY 指令的一部分。

依預設,MTA 不傳送 VRFY 指令 (啟用 novrfy 關鍵字)。

如有必要,可在通道定義中包含 domainvrfylocalvrfy 關鍵字,從而將 MTA 配置為發出 SMTP VRFY 指令。關鍵字 domainvrfy 可導致發出 VRFY 指令,並包含完整的位址 (user@host) 做為該指令的引數。localvrfy 關鍵字可使 MTA 發出 VRFY 指令,但僅包含位址中的本機部分 (user)。

回應 VRFY 指令

vrfyallowvrfydefaultvrfyhide 關鍵字可控制傳送 SMTP 用戶端發出 SMTP VRFY 指令時 SMTP 伺服器的回應。

vrfyallow 關鍵字告知 MTA 發出詳細的資訊回應。vrfydefault 告知 MTA 提供詳細的資訊回應,除非已指定通道選項 HIDE_VERIFY=1vrfyhide 關鍵字告知 MTA 僅發出模糊的回應。這些關鍵字允許針對各通道控制 VRFY 回應,而與之相對的 HIDE_VERIFY 選項通常適用於透過同一 SMTP 伺服器處理的所有內送 TCP/IP 通 道。

EXPN 支援

關鍵字:expnallowexpndisableexpndefault

expnallow 允許 EXPN,即使已在 SMTP 伺服器層級透過 DISABLE_EXPAND SMTP 通道選項停用了 EXPN。expndisable 無條件停用 EXPN。如果 SMTP 伺服器設定為允許 EXPN (預設),則 expndefault 允許 EXPN。可針對每個清單停用延伸,但如果在伺服器級別停用延伸,則每個清單的設定不相關。

DNS 網域驗證

關鍵字:mailfromdnsverifynomailfromdnsverify

對內送 TCP/IP 通道設定 mailfromdnsverify 會使 MTA 驗證 DNS 中是否存在 SMTP MAIL FROM 指令中所用網域的項目,如果該項目不存在,則拒絕郵件。預設為 nomailfromdnsverify,表示不執行上述檢查。請注意,對傳回位址網域執行 DNS 檢查可能會導致某些需要的有效郵件被拒絕 (例如,來自只是尚未註冊網域名稱,或有時在 DNS 中存在錯誤資訊的合法站點的郵件);這樣就違背了 RFC 1123「Requirements for Internet Hosts」所體現的在接受與傳送電子郵件方面的包容性。但是,有些站點可能希望執行上述檢查,以避免傳送不存在的網域的帶有偽造電子郵件位址的垃圾電子郵件 (UBE)。

由於 COMORG 頂層網域中引入 DNS 萬用字元項目使 mailfromdnsverify 的作用降低,因此對 mailfromdnsverify 代碼進行了修改。DNS 傳回一個或多個 A 記錄時,這些值會與由新的 MTA 選項 BLOCKED_MAIL_FROM_IPS 所指定的網域文字列進行比較。如果匹配,該網域會視為無效。為了復原正確的運作方式,目前的正確設定為:

BLOCKED_MAIL_FROM_IPS=[64.94.110.11]

此選項的值預設為空字串。

字元集標記與八位元資料

關鍵字:charset7charset8charsetescsevenbiteightbiteightnegotiateeightstrict

字元集標記

MIME 規格提供標記一般文字郵件中所使用的字元集的機制。具體來說,可指定 charset= 參數做為 Content-type: 標頭行的一部分。MIME 中定義了多種字元集名稱,包括 US-ASCII (預設)、ISO-8859-1 和 ISO-8859-2,後續還定義了許多其他字元集。

某些現有系統與使用者代理程式不提供產生上述字元集標籤的機制;因此,有些一般文字郵件可能不會被正確標記。charset7charset8charsetesc 通道關鍵字提供針對各通道的機制,可指定要在缺少字元集標記的郵件標頭中插入的字元集名稱。 每個關鍵字都需要單一引數,以提供字元集名稱。這些名稱的有效性不會被檢查。但請注意,只能對 MTA 表目錄字元集定義檔案 charsets.txt 中所指定的字元集執行字元集轉換。如有可能,應使用該檔案中定義的名稱。

如果郵件僅包含七位元字元,則使用 charset7 字元集名稱;如果郵件包含八位元資料,則使用 charset8 字元集名稱;如果在僅包含七位元資料的郵件中碰巧還包含退出字元,則使用 charsetesc。如果未指定適當的關鍵字,則不會在 Content-type: 標頭行中插入任何字元集名稱。

請注意,charset8 關鍵字還控制郵件標頭中 (8 位元資料對於該標頭絕對為非法) 8 位元字元的 MIME 編碼。如果未指定 charset8 值,MTA 通常會將在郵件標頭中遇到的所有 (非法) 8 位元資料進行 MIME 編碼,將其標記為 UNKNOWN 字元集。

這些字元集規格永遠不會置換現有標籤,即如果郵件已有字元集標籤或郵件是文字以外的其他類型,則這些字元集規格都無效。通常適合將 MTA 本機通道標記為以下形式:


l ... charset7 US-ASCII charset8 ISO-8859-1 ...
hostname

如果郵件中沒有 Content-type 標頭,則會加入該標頭。如果沒有 MIME-version: 標頭行,此關鍵字還會加入該標頭行。

對於接收使用日語或韓語字元集、且包含退出字元之未標記郵件的通道,charsetesc 關鍵字極其有用。

八位元資料

某些傳輸會限制使用序數值大於 127 (十進位) 的字元。最明顯的是,某些 SMTP 伺服器會刪除高位元,並因此竄改使用此八位元範圍內字元的郵件。

Messaging Server 提供對這類郵件自動編碼的功能,使棘手的八位元字元不會直接顯示在郵件中。透過指定 sevenbit 關鍵字,此編碼可套用於在給定通道上形成佇 列的所有郵件。如果不存在此類限制,則應將通道標記為 eightbit

SMTP 協定不允許使用 eightbit,「除非遠端 SMTP 伺服器明確表示支援允許使用 eightbit 的 SMTP 延伸」。某些傳輸 (例如延伸的 SMTP) 可以實際支援某種協商形式,以確定是否可以傳輸八位元字元。因此,極力建議使用 eightnegotiate 關鍵字來指示通道在協商失敗時對郵件進行編碼。這是所有通道的預設;不支援協商的通道只假定傳輸能夠處理八位元資料。

eightstrict 關鍵字告知 Messaging Server 拒絕所有標頭包含非法八位元資料的內送郵件。

協定串流

關鍵字:streaming

某些郵件協定支援串流作業。這表示 MTA 可以一次發出多個作業,並等候各作業的回覆成批到達。streaming 關鍵字控制在與通道關聯的協定中使用的協定串流之程度。此關鍵字需要整數參數,而參數的解譯方式特定於使用的協定。

在一般情況下,串流支援的有效程度透過 SMTP 管線化作業延伸來進行協商。因此,此關鍵字不應用於一般情況。

串流值有效範圍為到。數值 0 指定無串流,數值 1 會使 RCPT TO 指令群組串流,數值 2 會使 MAIL FROM/RCPT TO 串流,而數值 3 會使 HELO/MAIL FROM/RCPT TO 或 RSET/MAIL FROM/RCPT TO 串流被使用。預設值為 0。