LDAP 別名結果處理作業依次序分成許多階段完成。以下各節會描述這些階段。
如果別名搜尋成功,系統將檢查項目的物件類別以確定它包含用於使用者或群組的一組適當的物件類別。用於使用者和群組的所需物件類別之可能的集合通常由使用中的 schematag 來確定。即由 local.imta.schematag 設定決定。
表 9–1顯示由各種 schematag 值所產生的使用者和群組物件類別。
表 9–1 各種 schematag 值所產生的物件類別
schematag |
使用者物件類別 |
群組物件類別 |
---|---|---|
inetMailRouting+inetmailuser |
inetMailRouting+inetmailgroup |
|
mailRecipient + nsMessagingServerUser |
mailGroup |
|
inetLocalMailRecipient+inetmailuser |
inetLocalMailRecipient + inetmailgroup |
如同其餘模式標記處理一樣,本表中的資訊是程序內定的。但是,在 option.dat 檔 案中還有兩個 MTA 選項,LDAP_USER_OBJECT_CLASSES 和 LDAP_GROUP_OBJECT_CLASSES,設定這兩個選項可分別為使用者和群組指定不同的物件類別集。
例如,模式標記設定 ims50,nms41 等效於以下選項設定:
LDAP_USER_OBJECT_CLASSES=inetLocalMailRecipient+inetmailuser, mailRecipient+nsMessagingServerUser
LDAP_GROUP_OBJECT_CLASSES=inetLocalMailRecipient+inetmailgroup, mailGroup
如果 LDAP 結果不具有適用於使用者或群組的一組正確的物件類別,則會被忽略。MTA 還會確定它是否正在處理使用者或群組,並儲存該資訊。以後會多次用到這項儲存的資訊。
請注意,此處所述的物件類別設定還可用於建構實際 LDAP 搜尋篩選器,以用於檢查項目是否具有用於使用者或群組的正確物件類別。此篩選器可透過 $K 中介字元來存取。它還被內部儲存在 MTA 配置中,以供通道程式使用,並會在使用 imsimta cnbuild -option 指令時做為 LDAP_UG_FILTER 選項寫入 MTA 選項檔案 option.dat 中。該選項僅被寫入此檔案。MTA 永遠不會從此選項檔案中讀取它。
接著會檢查項目的狀態。狀態屬性有兩個:一個用於一般項目,另一個專用於郵件服務。
表 9–2 顯示模式標記項目中要根據生效的模式標記進行檢查的一般屬性與郵件特定的使用者或群組屬性。
表 9–2 要檢查的屬性
schematag |
類型 |
一般 |
郵件特定 |
---|---|---|---|
sims40 |
使用者 |
inetsubscriberstatus |
mailuserstatus |
sims40 |
群組 |
無 |
inetmailgroupstatus |
nms41 |
使用者 |
無 |
mailuserstatus |
nms41 |
群組 |
無 |
無 |
Messaging Server 5.0 |
使用者 |
inetuserstatus |
mailuserstatus |
Messaging Server 5.0 |
群組 |
無 |
inetmailgroupstatus |
如有必要,可使用 option.dat 檔案中的 LDAP_USER_STATUS 和 LDAP_USER_STATUS MTA 選項分別為使用者和群組選取替代一般狀態屬性。郵件特定的使用者和群組之狀態屬性由 LDAP_USER_MAIL_STATUS 和 LDAP_GROUP_MAIL_STATUS MTA 選項來控制。
此處起作用的另一個因素是網域自身的狀態 (LDAP_DOMAIN_ATTR_STATUS 和 LDAP_DOMAIN_ATTR_MAIL_STATUS)。總的來說有四個狀態屬性。它們按以下次序進行組合:
網域狀態
網域郵件狀態
使用者或群組狀態
郵件使用者或群組狀態
第一項指定非「active」的狀態優先順序是第一位的。其他允許的狀態值為「inactive」、「deleted」、「removed」、「disabled」、「hold」以及「overquota」。「Hold」、「disabled」以及「removed」狀態僅可指定給郵件網域、郵件使用者或郵件群組。「Overquota」狀態僅可指定為郵件網域狀態或郵件使用者狀態。
如果特定狀態屬性不存在,則所有狀態都預設為「active」。不明的狀態值被解譯為「inactive」。
當這四個狀態組合時,使用者或群組可能有以下狀態:「active」、「inactive」、「deleted」、「removed」、「disabled」、「hold」以及「overquota」。使用中狀態會使別名處理作業繼續。非使用中或超配額狀態會導致位址立即被拒絕,並產生 4xx (暫時性) 錯誤。已刪除、已移除以及已停用狀態會導致位址立即被拒絕,並產生 5xx (永久性) 錯誤。就狀態處理而言,保留狀態會被視為使用中,但該狀態將會設定內部旗標,這樣,以後考量傳送選項時,其中的所有選項都會由包含單一「hold」項目的選項清單來置換。
下一個步驟為考量項目的 UID。UID 用於多種用途,它必須為所有使用者項目的一部分,並且可以包括在群組項目中。沒有 UID 的使用者項目會被忽略,並且此 alias URL 的處理會以失敗告終。託管網域中項目的 UID 可由真實 UID、分隔字元以及網域組成。MTA 只需要真實 UID,因此,將使用透過 option.dat 檔案中的 LDAP_DOMAIN_ATTR_UID_SEPARATOR MTA 選項取得的網域分隔符號字元移除其餘部分 (如果存在)。
在使用 uid 之外的屬性儲存 UID 的情況 (不太可能發生) 下,可使用 LDAP_UID MTA 選項強制使用其他屬性。
接著,檢查用於指定一個或多個郵件擷取位址的 LDAP 屬性。用於此用途的屬性必須透過 LDAP_CAPTURE MTA 選項來指定。此選項沒有預設。此屬性的值會被做為位址來處理,然後會產生特殊的「擷取」通知,並會將該通知做為附件傳送至包含目前郵件的位址。此外,在擷取位址隨後將顯示為訊息封 from: 位址這種可能發生的情況下,該位址可用於植入位址反向快取記憶體:位址。
接著,考量主要位址和附加至使用者項目的所有別名。此資訊用於植入位址反向快取記憶體。它在目前位址轉譯程序中不起作用。首先,考量主要位址、個人名稱、收件者限制、收件者截止以及來源區塊限制。主要位址通常儲存在「mail」屬性中,其他屬性可以透過相應地設定 LDAP_PRIMARY_ADDRESS MTA 選項來指定。(當然,主要位址反向成其自身。)所有其他屬性都沒有預設屬性。如果要使用它們,就必須透過 LDAP_PERSONAL_NAME (請參閱休假自動回覆屬性)、LDAP_RECIPIENTLIMIT、LDAP_RECIPIENTCUTOFF (請參閱限制郵件收件者) 和 LDAP_SOURCEBLOCKLIMIT (請參閱指定絕對郵件大小限制) MTA 選項指定。此處還考量相應的網域級收件者限制、收件者截止以及來源區塊限制屬性。使用者級設定可完全置換任何網域級設定。
接著,考量所有次要位址,並為每個次要位址產生快取記憶體項目。次要位址有兩種:即接受位址反向的次要位址和不接受位址反向的次要位址。兩者均需要加以考量,以便正確植入位址反向快取記憶體,因為需要檢查各種情況下的郵件擷取請求。
接受反向處理的次要位址通常儲存在 mailAlternateAddress 屬性中。其他屬性可透過設定 LDAP_ALIAS_ADDRESSES MTA 選項指定。不接受反向處理的次要位址通常儲存在 mailEquivalentAddress 屬性中。其他屬性可透過 LDAP_EQUIVALENCE_ADDRESSES MTA 選項指定。
現在需要考量 mailhost 和 mailRoutingAddress 屬性。考量的實際屬性可分別由 LDAP_MAILHOST 和 LDAP_ROUTING_ADDRESS MTA 選項來置換。這些屬性協同工作,以確定此時是執行該位址還是將其轉寄至另一系統。
第一個步驟決定 mailhost 對於此項目是否有意義。對作用於項目的遞送選項執行預先檢查,以查看該項目是否為郵件主機特定的。如果不是,則省略 mailhost 檢查。請參閱遞送選項處理說明,尤其是 # 旗標,以瞭解如何執行此檢查。
對於使用者項目,mailhost 屬性必須標識本機系統,以便於執行。mailhost 屬性會與 local.hostname configutil 參數的值進行比較,並對照由 local.imta.hostnamealiases configutil 參數指定的值清單。如果其中任何一個匹配,則認為 mailhost 屬性標識本地主機。
相符成功意味著可以在本機執行別名並且別名處理會繼續。相符不成功則意味著需要將郵件轉寄至郵件主機以執行。新位址形式
@mailhost:user@domain
會建構出來並成為別名延伸作業的結果。
對缺少的 mailhost 屬性的處理會依該項目是使用者還是群組而有所不同。如果是使用者,郵件主機十分重要。因此,如果 mailhost 屬性不存在,則新的位址形式
@smarthost:user@domain
會使用 LDAP_DOMAIN_ATTR_SMARTHOST MTA 選項所決定的網域之智慧主機進行建構。如果該網域不存在智慧主機,則報告錯誤。
另一方面,群組不需要郵件主機。因此遺漏的郵件主機會被解譯為該群組可在任何位置延伸。因此,別名處理會繼續。
mailRoutingAddress 屬性增加了一個最終的方法。如果它存在,別名處理會終止,結果為 mailRoutingAddress。但是,如果郵件主機存在,它會做為來源路由增加至 mailRoutingAddress。
接下來要考量 mailMsgMaxBlocks 屬性。首先它會透過 LDAP_DOMAIN_ATTR_BLOCKLIMIT MTA 選項傳回的網域區塊限制進行最小化。如果已知目前郵件大小超過限制,別名處理會終止,並顯示表明超出大小的錯誤。如果大小未知或未超過限制,該限制仍然儲存,稍後檢查郵件本身時,將重新檢查該限制。mailMsgMaxBlocks 的使用可由 LDAP_BLOCKLIMIT MTA 選項來置換。
接著,會存取並儲存大量屬性。最終這些屬性將被寫入佇列檔案項目中,供 ims_master 通道程式使用,該程式將使用它們來更新儲存的使用者資訊快取記憶體。如果找不到個別使用者的這些屬性,可使用網域級屬性設定預設。
如果 LDAP 項目適用於群組而非使用者,或 LDAP 項目來自別名快取記憶體而非 LDAP 目錄,則跳過本步驟。後一準則的邏輯是,沒有必要頻繁更新該資訊,使用別名快取記憶體可為何時應進行更新提供合理的準則。擷取的這些屬性的名稱都可以透過各種 MTA 選項來設定。
表 9–3 顯示可設定擷取的磁碟配額與郵件配額屬性的 MTA 選項。
表 9–3 可設定擷取的磁碟配額與郵件配額屬性的 MTA 選項
MTA 選項 |
屬性 |
---|---|
mailMsgQuota |
接著,儲存大量屬性以供日後與中介字元替換一併使用。
表 9–4 顯示 MTA 選項、預設屬性以及中介字元。
表 9–4 MTA 選項、預設屬性以及中介字元
MTA 選項 |
預設屬性 |
中介字元 |
---|---|---|
mailProgramDeliveryInfo |
$P |
|
mailDeliveryFileURL |
$F |
|
無預設 |
$1E $1G $E |
|
無預設 |
$2E $2G $G |
|
LDAP_SPARE_3 |
無預設 |
$3E $3G |
LDAP_SPARE_4 |
無預設 |
$4E $4G |
LDAP_SPARE_5 |
無預設 |
$5E $5G |
其中包括了其他屬性的備用位置,以便您使用它們來建立自訂位址延伸工具。
接著,所有與 mailconversiontag 屬性相關的值均會被增加至目前的轉換標記集中。此屬性的名稱可使用 LDAP_CONVERSION_TAG MTA 選項來變更。任何與網域的 mailDomainConversionTag 屬性關聯的值也會被附加。
接著,將會檢查 mailDeliveryOption 屬性。此屬性的名稱可透過 LDAP_DELIVERY_OPTION MTA 選項進行變更。這是一個多值選項,其值可確定別名轉譯程序所產生的位址。此外,允許的值對於使用者和群組不同。共用的允許值包括 program、forward 和 hold。僅針對使用者的值為 mailbox、native、unix 和 autoreply。僅針對群組的值為 members、members_offline 和 file。
mailDeliveryOption 屬性至相應位址的轉換由 DELIVERY_OPTIONS MTA 選項來控制。此選項不僅指定每個允許的 mailDeliveryOption 值會產生哪些位址,還指定允許的 mailDeliveryOption 值有哪些,以及每個值是否適用於使用者、群組或同時適用於這兩者。
此選項的值由以逗號分隔的 deliveryoption=template 對清單組成,每對均具有一個或多個選擇性單一字元前綴。
DELIVERY_OPTIONS=*mailbox=$M%$\\$2I$_+$2S@ims-ms-daemon, \ &members=*, \ *native=$M@native-daemon, \ /hold=@hold-daemon:$A, \ *unix=$M@native-daemon, \ &file=+$F@native-daemon, \ &@members_offline=*, \ program=$M%$P@pipe-daemon, \ #forward=**, \ *^!autoreply=$M+$D@bitbucket
每個傳送選項均對應可能的 mailDeliveryOption 屬性值,並且相應的範本可透過 URL 處理使用的同一中介字元替換模式指定結果位址。
表 9–5 顯示可用於 DELIVERY_OPTIONS 選項的單一字元前綴。
表 9–5 用於 DELIVERY_OPTIONS MTA 選項中各選項的單一字元字首。
字元字首 |
說明 |
---|---|
@ |
設定旗標表示需要將該郵件重新導向至重新處理通道。已捨棄目前使用者/群組的處理作業。對源自重新處理通道的郵件忽略旗標。 |
* |
遞送選項適用於使用者。 |
& |
遞送選項適用於群組。 |
$ |
設定旗標表示該使用者或群組的延伸將延遲。 |
^ |
設定旗標表示應檢查休假開始和結束,時間以查看此遞送選項是否真正生效。 |
# |
設定旗標,表示此傳送選項的擴充無需發生在項目的指定郵件主機上。即,以下項目獨立於郵件主機。這會讓 MTA 檢查給定使用者或群組的所有傳送選項是否均獨立於郵件主機。如果滿足此條件,MTA 可立即處理此項目,而不必將郵件轉寄給郵件主機。 |
/ |
設定旗標可使此遞送選項產生的所有位址得以保留。包含這些收件者位址的郵件檔案將具有 .HELD 副檔名。 |
! |
設定旗標表示應該由 MTA 在內部處理自動回覆作業。僅對自動回覆遞送選項使用此字首時有意義。此選項的值應將郵件導向至 bitbucket 通道 |
如果 * 和 & 均不存在,則傳送選項既適用於使用者,又適用於群組。
已新增數個其他中介字元以支援 MTA 之 URL 範本工具的新用法。這些圖元字元包括:
表 9–6 顯示在遞送選項中使用的其他中介字元及其說明。
表 9–6 在遞送選項中使用的其他中介字元
中介字元 |
說明 |
---|---|
$\ |
強制後續文字採用小寫。 |
$^ |
強制後續文字採用大寫。 |
$_ |
不對後續文字執行大小寫轉換。 |
$nA |
插入位址的第 n 個字元。第一個字元為字元 0。如果省略 n,則將替換整個位址。這是為了用於建構自動回覆目錄路徑。 |
$D |
插入位址的網域部分。 |
$nE |
插入第 n 個備用屬性的值。如果省略 n,則使用第一個屬性。 |
$F |
插入傳送檔案 (mailDeliveryFileURL 屬性) 的名稱。 |
$nG |
插入第 n 個備用屬性的值。如果省略 n,則使用第二個屬性。 |
$nH |
從 0 數起,插入原始位址網域的第 n 個元件。如果省略 n,則預設為 0。 |
$nI |
插入與別名相關的託管網域。此中介字元接受整數參數 n,該參數語義在表 9–7 中加以說明。 |
$nJ |
從 0 數起,插入主機網域的第 n 個部分。n 預設為 0。 |
$nO |
插入於目前位址關聯的來源路由。此中介字元接受整數參數 n,該參數語義在表 9–7 中加以說明。 |
$K |
插入與使用者或群組的物件類別相符的 LDAP 篩選器。請參閱 LDAP_UG_FILTER 僅限輸出之 MTA 選項的說明。 |
$L |
插入位址的本機部分。 |
$nM |
插入 UID 的第 n 個字元。第一個字元為 0 字元。如果省略則將替換整個 UID。 |
$P |
插入程式名稱 (mailProgramDeliveryInfo 屬性)。 |
$nS |
插入與目前位址相關的子位址。此中介字元接受整數參數 n,該參數語義在表 9–7 中加以說明。 |
$nU |
插入目前位址中未加引號形式的電子信箱部分中的第 n 個字元。第一個字元為 0 字元。如果省略則將替換整個未加引號的電子信箱。 |
$nX |
插入郵件主機的第 n 個元件。如果省略 n,則插入整個郵件主機。 |
表 9–7 顯示整數參數如何修改中介字元 $nI 和 $nS 的運作方式。
表 9–7 控制 $nI 和 $nS 中介字元運作方式修改的整數
整數 |
運作方式說明 |
---|---|
0 |
如果無可用值則失敗 (預設)。 |
1 |
如果有一個值可用,則插入該值。否則不插入任何內容。 |
2 |
如果有一個值可用,則插入該值。否則不插入任何內容,並刪除前面的字元 (ims-ms 通道需要這種特殊的運作方式)。 |
3 |
如果有一個值可用,則插入該值。否則不插入任何字元,並忽略後續字元。 |
除了這些中介字元外,表 9–8 還顯示兩個特殊的範本字串。
表 9–8 特殊範本字串
特殊範本字串 |
說明 |
---|---|
* |
執行群組延伸。此值對於使用者項目無效。 |
** |
擴充由 LDAP_FORWARDING_ADDRESS MTA 選項命名的屬性。預設為 mailForwardingAddress。 |
例如,如果使用者的 mailDeliveryOption 值設定為 mailbox,透過群組擴充,可以產生新的位址,該位址由被刪除的 UID、後接託管網域 (如果適用) 的百分號、後接子位址 (如果已指定) 的加號以及 @ims-ms-daemon 組成。
如果此處使用中的遞送選項清單為空,則為使用者啟動清單上的第一個選項 (通常為電子信箱) 為群組啟動清單上的第二個選項通常為成員。
在讀取遞送選項清單之後檢查開始和結束日期。存在兩個屬性,其名稱分別由 LDAP_START_DATE (預設 vacationStartDate ) 和 LDAP_END_DATE (預設 vacationEndDate) MTA 選項控制。如果一個或多個使用中的傳送選項指定了 ^ 前綴字元,則將會對照目前日期來檢查這些選項的值。如果目前日期超出了這些選項指定的範圍,則會從使用中的集合中移除具有 ^ 前綴的傳送選項。如需更多資訊,請參閱休假自動回覆屬性。
LDAP_OPTIN MTA 選項可用於指定包含垃圾郵件篩選器 opt-in 值清單的 LDAP 屬性。如果此選項已指定並且該屬性存在,則會附加至目前垃圾郵件篩選器選擇加入清單。網域層級屬性 (由LDAP_DOMAIN_ATTR_OPTIN MTA 選項設定) 設定的所有值也會附加至該清單。
LDAP_PRESENCE MTA 選項可用於指定可以被解析以傳回使用者身份認證資訊的 URL。如果此選項已指定並且該屬性存在,其值會被儲存,以與篩選存在性測試一併使用。如果使用者項目不存在值,則使用 LDAP_DOMAIN_ATTR_PRESENCE MTA 選項設定的網域層級屬性做為此 URL 來源。
接著,檢查適用於此項目的篩選器之 mailSieveRuleSource 屬性。如果該屬性存在,此時會被剖析並儲存。此屬性的值有兩種可能的形式,即包含完整篩選程序檔的單一值和每個值都包含一段篩選程序檔的多個值。後一種形式由 Web 篩選器建構介面產生。可以使用特殊程式碼排序這些值,並將它們正確地綁定在一起。
mailSieveRuleSource 屬性可專門使用 LDAP_FILTER MTA 選項進行置換。
接著,將會檢查 mailDeferProcessing 屬性。此屬性可使用 LDAP_REPROCESS MTA 選項進行變更。如果此屬性存在且被設定為 no,處理會正常繼續。但如果該屬性設定為 yes 且目前來源通道並非重新處理通道,此項目的擴充就會中斷,而原始 user@domain 位址僅在重新處理通道中形成佇列。如果該屬性不存在,系統會檢查與遞送選項處理作業相關的延遲處理字元字首的設定。(請參閱遞送選項處理)。針對使用者的預設為 no。針對群組的預設由 MTA 選項 DEFER_GROUP_PROCESSING (預設為 1 [yes]) 控制。使用者項目的別名處理作業到此結束。
有大量附加屬性與群組擴充相關,並且必須在此處進行處理。這些屬性的名稱都可以透過各種 MTA 選項來配置。
表 9–9 中列出了預設屬性名稱、可設定屬性名稱的 MTA 選項以及 MTA 處理屬性的方 式。本表中元素的排序顯示處理各種群組屬性的次序。本排序對於正確運作十分重要。
表 9–9 群組延伸預設屬性以及要設定的 MTA Option
在群組延伸作為 SMTP EXPN 指令的一部分,這種特殊情況下會檢查最後一個屬性:mgmanMemberVisibility 或可擴充。LDAP_EXPANDABLE MTA 選項可用於選取要檢查的不同屬性。可能的值為:anyone (表示任何人都可以擴充該群組)、all 或 true (表示在允許擴充之前使用者需要透過 SASL 成功進行認證) 以及 none (表示不允許擴充)。無法識別的值將被解釋為 none。如果該屬性不存在,則 EXPANDABLE_DEFAULT MTA 選項將會控制是否允許擴充。
別名項目的快取方式與網域項目類似。控制別名快取記憶體的 MTA 選項為 ALIAS_ENTRY_CACHE_SIZE (預設為 1000 個項目) 和 ALIAS_ENTRY_CACHE_TIMEOUT (預設為 600 秒)。給定別名的整個 LDAP 傳回值會保留在快取記憶體中。
別名項目的負值快取由 ALIAS_ENTRY_CACHE_NEGATIVE MTA 選項來控制。非零值會啟用遇到故障的別名快取。零值則會停用它。依預設,停用別名項目的負數快取。其原理是,無效位址的重複規格在實際中不太可能經常發生。此外,負數快取可能會干擾新增至目錄的新使用者的及時識別。但是,站點應該考量在大量使用虛名網域的情況下重新啟用別名的負數快取。在 ALIAS_URL0 中指定的 URL 所執行的搜尋不大可能會成功。