從位址中擷取第一個主機或網域規格之後,MTA 將參考重寫規則以找出處理它的方法。然後將主機/網域規格與每個規則的式樣部分 (即每個規則的左側) 進行比較。這種比較不區分大小寫。RFC 822 規定不區分大小寫。MTA 不區分大小寫,但會儘可能保留大小寫。
如果主機或網域規格與任何式樣均不相符,在這種情況下稱為「不符合任何規則」,則主機或網域規格的第一部分 (第一個小數點號之前的部分,通常是主機名稱) 將被移除,並以星號 (*) 替代,然後系統將嘗試找出結果主機或網域規格的位置,但僅在配置檔案重寫規則中查找 (不諮詢網域資料庫)。
如果此作業失敗,將移除第一部分並重複該程序。如果此作業也失敗了,則會移除下一個部分 (通常是子網域),然後重寫程式將重試,第一次帶星號,以後不帶星號。包含星號的所有探測僅在配置檔案重寫規則表中進行;不檢查網域資料庫。該程序將繼續進行,直至找到相符或耗盡整個主機或網域規格。該程序的作用是,首先嘗試比對最特殊的網域,然後比對不太特殊和更為一般的網域。
使用主機/網域規格做為比較字串 spec_1 和 spec_2 的初始值。(例如,spec_1 = spec_2 = a.b.c)。
將比較字串 spec_1 與配置檔案中每個重寫規則的式樣部分進行比較,然後與網域資料庫中的式樣部分進行比較,直至找到相符的式樣。如果找到相符,比對程序將結束。
如果未找到相符的式樣,則將 spec_2 最左側的非星號部分轉換為星號。例如,如果 spec_2 為 a.b.c,則變更為*.b.c;如果 spec_2 為 *.b.c,則變更為 *.*.c。 如果找到相符的式樣,則比對程序將結束。
如果未找到相符的式樣,則比較字串 spec_1 的第一部分 (包括所有前導小數點號) 將被移除。其中,spec_1 僅具有一部分 (例如 .c 或 c),使用單一小數點號「.」替代字串。如果結果字串 spec_1 的長度非零,則返回至步驟 1。如果結果字串長度為零 (例如,之前的「.」),則查詢程序會失敗並結束比對程序。
例如,假設要重寫位址 dan@sc.cs.siroe.edu。這會導致 MTA 以指定次序查找以下式樣:
sc.cs.siroe.edu *.cs.siroe.edu .cs.siroe.edu *.*.siroe.edu .siroe.edu *.*.*.edu .edu *.*.*.* . |