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

郵件未移出佇列

在 TCP/IP 遞送期間遇到的錯誤通常是暫時的;在遇到問題時,MTA 通常會保留郵件並定期重試遞送郵件。在大型網路中,某些主機上遇到週期性中斷而其他主機連線工作正常,這種情況很正常。若要驗證此問題,請檢查記錄檔以取得與遞送嘗試相關的錯誤。您可能會看到諸如「smtp_open 發生嚴重錯誤」的錯誤訊息。此類錯誤並非罕見,並且通常與暫時的網路問題相關聯。若要除錯 TCP/IP 網路問題,請使用諸如 PING、TRACEROUTE 和 NSLOOKUP 的公用程式。

您可以使用以下範例顯示的步驟來查看郵件要在佇列中等待傳送至 xtel.co.uk 的原因。若要確定郵件未移出佇列的原因,您可以重新建立 MTA 經由 TCP/IP 遞送 SMTP 郵件的步驟。


% nslookup -query=mx xtel.co.uk (Step 1)
            
Server: LOCALHOST
Address: 127.0.0.1

Non-authoritative answer:
XTEL.CO.UK  preference = 10, mail exchanger = nsfnet-relay.ac.uk (Step 2)

% telnet nsfnet-relay.ac.uk 25 (Step 3)
Trying... [128.86.8.6]
telnet: Unable to connect to remote host: Connection refused
  1. 使用 NSLOOKUP 公用程式查看此主機存在的 MX 記錄 (如果有)。如果不存在 MX 記錄,則您應嘗試直接連線至此主機。如果確實存在 MX 記錄,則您必須連線至指定的 MX 轉送器。MTA 優先使用 MX 資訊,除非明確配置為不這樣做。另請參閱TCP/IP MX 記錄支援

  2. 在此範例中,DNS (網域名稱服務) 傳回 xtel.co.uk 的指定 MX 轉送器的名稱。這是 MTA 將實際連線至的主機。如果列出多個 MX 轉送器,則 MTA 將連續嘗試每個 MX 記錄,並且首先嘗試具有最低喜好設定值的記錄。

  3. 如果您確實已連線至遠端主機,您應透過對 SMTP 伺服器連接埠 25 使用 TELNET 以檢查此遠端主機是否接受內送 SMTP 連線。


    備註 –

    如果您在未指定連接埠的情況下使用 TELNET,則將發現遠端主機接受一般 TELNET 連線。這並不表示它接受 SMTP 連線;許多系統接受一般 TELNET 連線,但拒絕 SMTP 連線,反之亦然。因此,您應始終對 SMTP 連接埠進行測試。


    在前面的範例中,遠端主機拒絕連線至 SMTP 連接埠。這是 MTA 無法遞送郵件的原因。由於遠端主機的配置錯誤,或遠端主機上的某種資源耗盡,連線可能會被拒絕。在此情況下,無法在本機進行任何操作來解決此問題。通常,您應讓 MTA 繼續重試遞送郵件。

如果您要在未使用 DNS 的 TCP/IP 網路上執行 Messaging Server,您可以略過前兩個步驟。作為替代,您可以使用 TELNET 直接存取有問題的主機。注意應使用與 MTA 使用的主機名稱相同的名稱。請查看 MTA 最後一次嘗試的相關記錄檔,以確定主機名稱。如果您要使用主機檔案,則應確保主機名稱資訊正確。極力建議您使用 DNS,而不是主機名稱。

請注意,如果您在使用互動式測試來測試至 TCP/IP 主機的連線時未遇到問題,則問題很可能在 MTA 最後嘗試遞送郵件時便被解決。您可以在相應的通道上再次執行 imsimta submit tcp_channel,以查看郵件是否被移出佇列。

建立新通道

在某些情況下,遠端網域可能會出現故障,且定址至此伺服器的郵件容量可能很大,從而導致外寄通道佇列被無法傳送的郵件填滿。MTA 嘗試定期重新傳送這些郵件 (使用 backoff 關鍵字配置重試的頻率和次數),且在一般情況下,無需任何動作。然而,如果太多郵件滯留在佇列中,則其他郵件可能無法及時傳送,因為所有通道正在處理無法傳送的積壓郵件。

在此情況下,您可以重新將這些郵件路由至在其自己的工作控制器池中執行的新通道。這將避免處理的競爭狀態,並允許其他通道傳送郵件。下面對此程序進行說明。我們假設網域名為 siroe.com

Procedure建立新通道

步驟
  1. 建立名為 tcp_siroe-daemon 的新通道並為 pool 關鍵字增加新值。

    通道在 /msg_svr_base/config/imta.cnf 的通道區段中建立。通道應該具有與一般外寄 tcp_* 通道上相同的通道關鍵字。通常為 tcp_local 通道,其處理所有外寄 (網際網路) 流量。由於 siroe.com 在網際網路上無法使用,此為要模擬的通道。新通道可能與以下顯示類似︰

    tcp_siroe smtp nomx single_sys remotehost inner allowswitchchannel     \
    dentnonenumeric subdirs 20 maxjobs 7 pool SMTP_SIROE maytlsserver      \
    maysaslserver saslswitchchannel tcp_auth missingrecipientpolicy 0      \    
    tcp_siroe-daemon

    請注意新關鍵字值對池 SMTP_SIROE。其指定此通道的郵件將僅使用 SMTP_SIROE 池中的電腦資源。另請注意,新通道前後均需要一個空行。

  2. 將兩個重寫規則增加至 imta.cnf 檔案的重寫規則區段,以將為 siroe.com 指定的電子郵件導向至新通道。

    新重寫規則與以下顯示類似︰


    siroe.com     $U%$D@tcp_siroe-daemon
    .siroe.com      $U%$H$D@tcp_siroe-daemon
                         

    這些重寫規則會將郵件導向至 siroe.com (包括諸如 host1.siroe.com 或 hostA.host1.siroe.com 的位址),從而導向至正式主機名稱為 tcp_siroe-daemon 的新通道。這些規則的重寫部分 $U%$D 和 $U%$H$D 保留郵件的原始位址。$U 從原始位址中複製使用者名稱。% 為分隔符號—@ 位於使用者名稱和網域之間。$H 複製式樣中小數點號左側不符合的主機/網域規格部分。$D 複製符合的網域規格部分。

  3. 定義名為 SMTP_SIROE 的新工作控制器池。

    /msg_svr_base/config/job_controller.cnf 中,增加以下內容︰


    [POOL=SMTP_SIROE]
    job_limit=10
                         

    這將建立名為 SMTP_SIROE 的郵件資源池,允許同時執行最多 10 個工作。請勿在此池定義和其他池定義之間保留任何空行。請參閱工作控制器,以取得有關工作和池的詳細資訊。

  4. 重新啟動 MTA。

    發出指令:imsimta refresh

    其會重新編譯配置並重新啟動工作控制器和派送程式。

    在此範例中,來自內部使用者的大量電子郵件將名為 siroe.com 的特定遠端網站做為目標。出於某種原因,siroe.com 暫時無法接受內送 SMTP 連線,因而無法傳送電子郵件。(此類情況並不罕見。)

    隨著以 siroe.com 為目標的電子郵件不斷傳入,無法傳送的郵件將會填滿外寄通道佇列 (通常為 tcp_local)。MTA 嘗試定期重新傳送這些郵件 (使用 backoff 關鍵字配置重試的頻率和次數),且在一般情況下,無需任何動作。

    然而,如果太多郵件滯留在佇列中,則其他郵件可能無法及時傳送,因為所有通道都在處理積壓的 siroe.com 郵件。在此情況下,您可能要將 siroe.com 郵件重新路由至在其自己的工作控制器池中執行的新通道 (請參閱工作控制器)。此作業使其他通道可以傳送各自的郵件,而無需佔用 siroe.com 郵件使用的處理資源。請依照下一小節中的說明建立新通道來解決此問題。