本節說明如何逐步疑難排解特定的 MTA 問題。在此範例中,郵件收件者未收到電子郵件的附件。備註:為了與 MIME 協定術語保持一致,本小節中將「附件」稱為「郵件部分」。之前提到的疑難排解技術用於識別郵件部分消失的位置和原因 (請參閱26.2 標準 MTA 疑難排解程序)。您可以使用以下步驟確定郵件通過 MTA 的路徑。此外,您可以確定郵件部分是在郵件進入郵件佇列之前還是之後消失的。若要這樣做,您需要手動停止並執行通道,並且擷取相關的檔案。
當您手動執行通過通道的郵件時,工作控制器必須處於執行狀態。
透過識別哪些通道位於郵件路徑中,您可以將 master_debug 和 slave_debug 關鍵字套用至相應的通道。這些關鍵字會在通道的主要記錄檔和從屬記錄檔中產生除錯輸出;而主除錯資訊和從屬除錯資訊將協助識別郵件部分消失的點。
將 log_message_id=1 增加到目錄 /msg-svr-base/config 內的 option.dat 檔案中。使用此參數,您會在 mail.log_current 檔案中看到郵件 ID: 標頭行。
執行 imsimta cnbuild 以重新編譯配置。
執行 imsimta restart dispatcher 以重新啟動 SMTP 伺服器。
讓一般使用者重新傳送帶郵件部分的郵件。
確定郵件通過的通道。
雖然有不同的方法可識別通道,但建議使用以下方法:
在 UNIX 平台上,使用 grep 指令,在目錄 /msg-svr-base/log 內的 mail.log_current 檔案中搜尋郵件 ID: 標頭行。
一旦找到郵件 ID:標頭行,則請尋找 E (排入佇列) 和 D (移出佇列) 記錄以確定郵件的路徑。請參閱25.3.1 瞭解 MTA 記錄項目格式,以取得有關記錄項目代碼的更多資訊。請參閱此範例的以下 E 和 D 記錄:
29-Aug-2001 10:39:46.44 tcp_local conversion E 2 ... 29-Aug-2001 10:39:46.44 conversion tcp_intranet E 2 ... 29-Aug-2001 10:39:46.44 tcp_intranet D 2 ... |
左側的通道為來源通道,右側的通道為目標通道。在此範例中,E 和 D 記錄表示郵件路徑是從 tcp_local 通道到 conversion 通道,並最後到 tcp_intranet 通道。
本節說明如何手動啟動和停止通道。請參閱26.2.7 啟動和停止個別通道,以取得更多資訊。透過啟動和停止郵件路徑中的通道,您可以在 MTA 程序的不同階段儲存郵件和記錄檔。稍後會將這些檔案用以識別郵件故障點。
在目錄 /msg-svr-base/config 中的 option.dat 檔案中設定 mm_debug=5,以提供充足的除錯資訊。
將 slave_debug 和 master_debug 關鍵字增加至目錄 /msg-svr-base/config 下 imta.cnf 檔案中的適當通道中。
從傳送具有郵件部分的郵件之遠端系統,在傳入通道 (或在初始對話期間將郵件切換至的任一通道) 上使用 slave_debug 關鍵字。在此範例中,slave_debug 關鍵字被增加至 tcp_local 通道。
將 master_debug 關鍵字增加至傳送郵件且在26.2.8.1 識別郵件路徑中的通道中被識別的其他通道,將增加至 conversion 和 tcp_intranet 通道。
執行指令 imsimta restart dispatcher 以重新啟動 SMTP 伺服器。
使用 imsimta qm stop 和 imsimta qm start 指令手動啟動和停止特定通道。如需有關使用這些關鍵字的更多資訊,請參閱26.2.7 啟動和停止個別通道。
啟動擷取郵件檔的程序讓一般使用者重新傳送帶郵件部分的郵件。
當郵件進入通道時,如果已使用 imsimta qm stop 指令停止此通道,則郵件將在此通道中停止。如需更多資訊,請參閱步驟 3。
在您手動執行郵件路徑中的下一個通道之前,請複製並重新命名此郵件檔案。請參閱以下 UNIX 平台範例:
# cp ZZ01K7LXW76T7O9TD0TB.00 ZZ01K7LXW76T7O9TD0TB.KEEP1
郵件檔案通常存在於與 /msg-svr-base/data/queue/destination_channel /001 相似的目錄中。destination_channel 是郵件傳送的下一個通道 (例如︰tcp_intranet)。如果您要在 destination_channel 目錄中建立子目錄 (如 001、002 等),請將 destination_channel目錄, 增加subdirs 關鍵字加入通道。
建議您每次擷取並複製郵件時,對郵件的副檔名進行編號以識別郵件處理的次序。
繼續在通道中進行郵件處理,並在郵件路徑的下一個目標通道中排入佇列。若要如此,請使用 imsimta qm start 指令。
複製並儲存位於目錄 /msg-svr-bas/log 中的對應通道記錄檔 (例如:tcp_intranet_master.log-*)。選擇具有追蹤郵件資料之適當記錄檔。確保您複製的檔案符合郵件進入通道時的時間戳記以及主旨標頭。在 tcp_intranet_master.log-* 的範例中,可以將此檔案儲存為 tcp_intranet_master.keep,以使此檔案不會遭刪除。
重複步驟 5 至 7,直至郵件已到達其最終目標。
在步驟 7 中複製的記錄檔應與步驟 5 中複製的郵件檔案關聯。例如,如果在缺少郵件部分的情形下停止了所有通道,則應儲存 conversion_master.log-* 和 tcp_intranet_master.log-* 檔案。您還應儲存來源通道記錄檔 tcp_local_slave.log-*。此外,您還應從每個目標通道儲存一份對應的郵件檔:從 conversion 通道儲存 ZZ01K7LXW76T7O9TD0TB.KEEP1,從 tcp_intranet 通道儲存 ZZ01K7LXW76T7O9TD0TB.KEEP2。
複製完郵件和記錄檔後,請移除除錯選項。
檢查 tcp_local_slave.log-* 檔案,以確定郵件在進入郵件佇列時是否具有郵件部分。
檢查 SMTP 對話和資料以查看從用戶端機器傳送的內容。
如果郵件部分未顯示在 tcp_local_slave.log-* 檔案中,則問題出現在郵件進入 MTA 之前。結果郵件在不帶郵件部分的情況下排入佇列。如果發生此情況,問題會出現在寄件者的遠端 SMTP 伺服器上或出現在寄件者的用戶端機器中。
檢查郵件檔的副本以查看郵件部分在何處被改變或遺漏。
如果有任何郵件檔案顯示郵件部分被改變或缺少,請檢查先前通道的記錄檔。例如,如果進入 tcp_intranet 通道的郵件中的郵件部分被改變或缺少,您應檢查 conversion_master.log-* 檔案。
檢查郵件的最終目標。
如果郵件部分看上去未在 tcp_local_slave.log、郵件檔案 (例如:ZZ01K7LXW76T7O9TD0TB.KEEP1) 以及 channel_master.log-* 檔案中發生改變,則 MTA 不會改變郵件,郵件部分將在通往其最終目標的路徑中之下一步消失。
如果最終目標為 ims-ms 通道 (郵件儲存),則您可以將郵件從伺服器下載至用戶端機器,以確定郵件部分是否在此傳送期間或之後被遺漏。如果目標通道為 tcp_* 通道,則您需要移至郵件路徑中的 MTA。假設其為 Messaging Server MTA,您需要重複整個疑難排解程序 (請參閱26.2.8.1 識別郵件路徑中的通道、26.2.8.2 手動啟動和停止通道以收集資料和本小節)。如果另一 MTA 未在您的管理之下,則報告此問題的使用者應與該特定網站連絡。