Sun Java System Messaging Server 6.3 管理指南

20.9 設定自動移除郵件 (過期和清除) 功能

自動移除郵件功能 (也稱為過期和清除) 可根據一組管理員定義的條件從郵件儲存中自動移除郵件。此功能可自動移除舊的或過大的郵件、已讀取/已刪除的郵件及帶有特定 [主旨︰] 行的郵件等。此功能允許使用以下移除條件:

此功能由 imexpire 公用程式執行,可永久刪除並清除郵件。請參閱20.3 郵件儲存如何移除郵件,以取得有關郵件移除程序的詳細資訊。


備註 –

伺服器會在不發出警告的情況下移除郵件,因此有必要事先告知使用者自動移除郵件的策略。未預期移除郵件可能會讓使用者及管理員大吃一驚。


20.9.1 imexpire 的運作原理

您可以從指令行呼叫 imexpire,或藉由 imsched 常駐程式進行排程以自動執行。管理員可在名為 store.expirerule 的檔案中指定一組過期規則。此檔案指定移除郵件所依據的條件。可以有多個檔案,每個檔案放置於附屬於某一規則範圍的目錄中。亦即,將可全域套用至整個郵件儲存的規則放置於一個目錄中,將套用至分割區的規則放置於另一個目錄中,將套用至使用者的規則放置於第三個目錄中,以此類推。


備註 –

雖然全域過期規則可透過 configutil 指令與 store.expire.attribute 參數加以指定,但最好還是使用 store.expirerule 來指定。若使用 configutil 建立太多規則,可能會導致效能問題。


imexpire 會在系統啟動時載入所有過期規則。依預設,imexpire 會為每個分割區建立一個執行緒。每個執行緒會將其指定分割區內的使用者資料夾清單掃過一遍,然後載入本機過期規則檔案。過期功能會根據適用於資料夾的過期規則來檢查每個資料夾,並依需要永久刪除郵件。若電子信箱目錄下含有 store.exp 檔案,並且其中已永久刪除/已過期郵件超過了透過 store.cleanupage 配置參數所指定的時間,則清除功能會永久性移除郵件雜湊目錄下的郵件檔案,並將 UID 記錄從 store.exp 檔案中移除。

您也可以將特定使用者的使用者 ID 增加 (每行一個) 至 msg-svr-base/config/ 中名為 expire_exclude_list 的檔案中,將其排除在過期規則之外。

20.9.2 佈署自動移除郵件功能

自動移除郵件需要三個步驟:

  1. 定義自動移除郵件的策略:哪些郵件將被自動移除?哪些使用者、資料夾、網域及分割區可以自動移除郵件?哪些大小、郵件存在時間及標頭將定義移除條件。定義要移除的郵件範圍。請參閱20.9.2.1 定義自動移除郵件的策略

  2. 指定實作此策略的 imexpire 規則。請參閱20.9.2.2 設定實作自動移除郵件策略的規則

  3. 指定 imexpire 排程。請參閱20.9.2.3 排程自動移除郵件和記錄層級

20.9.2.1 定義自動移除郵件的策略

透過指定移除條件來定義您的自動移除郵件策略。imexpire 允許使用下列條件定義移除:

郵件的存在時間。自動移除超過 X 天的郵件。屬性:messagedays

郵件計數。自動移除超出 X 封郵件的資料夾中的郵件。屬性:messagecount

超出大小限制的郵件的存在時間。在 Y 天寬限期之後自動移除超過 X 位元組的郵件。屬性:messagesizemessagesizedays

已讀取已刪除郵件旗標。自動移除設定已讀取已刪除旗標的郵件。這些條件可設定為「and」「or」。若設定為 or,則郵件的已讀取/已刪除旗標將導致自動刪除,無論其他條件為何。若設定為 and,則郵件的已讀取/已刪除旗標必須設定為同時滿足其他所有指定的條件。屬性:seendeleted

郵件的標頭欄位。可讓您指定標頭和字串作為移除郵件的條件。例如,移除標頭中含有「主旨︰Work from Home!」

郵件資料夾。可讓您指定要移除其中郵件的資料夾。屬性:folderpattern。請注意,此屬性僅使用修改過的 UTF-7 字元集。


備註 –

imexpire 不允許根據讀取郵件之後所經過的時間來刪除或保留郵件。例如,您無法指定移除有 200 天未被讀取的郵件。


自動移除郵件策略的範例

範例 1:在超過 1,000 封郵件的資料夾中移除所有已存放 365 天以上的郵件。

範例 2:移除 siroe.com 網域中已存放 180 天以上的郵件。

範例 3:移除所有標記為已刪除的郵件。

範例 4:移除符合以下條件的郵件:位於 sesta.com、被標記為已讀取、已超過 30 天以上、容量超過 100 KB、所在的資料夾包含 1,000 封以上的郵件,並且標頭為 X-spam

20.9.2.2 設定實作自動移除郵件策略的規則

若要實作前一節中定義的自動移除郵件策略,您必須設定 imexpire 規則。您必須將規則放置於 store.expirerule 檔案中,藉以設定規則。以下是包含兩個全域 store.expirerule 規則的範例:


Rule1.regexp: 1
Rule1.folderpattern: user/.*/trash
Rule1.messagedays: 2
Rule2:regexp: 1
Rule2.folderpattern: user/.*
Rule2.messagedays: 14

            

在此範例中,Rule 1 指定垃圾箱資料夾中的所有郵件將在兩天後被移除。Rule 2 指定郵件儲存中的所有郵件將在 14 天後被移除。

本節包含以下小節:

過期規則使用準則

本小節說明 store.expirerule 檔案規則的使用準則。


備註 –

在舊版的 Messaging Server 中,可以使用 configutil 參數 store.expirerule. attribute 設定過期規則 (請參閱「Sun Java System Messaging Server 6.3 Administration Reference」中的「configutil Parameters」)。現在仍可使用,但是不再支援使用標頭限制的過期規則 (例如使具有特定主旨行的郵件過期)。在任何情況下,最好都使用 store.expirerule 來指定所有過期規則。


表 20–8 imexpire 屬性

屬性 

說明 (屬性值) 

action

指定要對過期規則所發現的郵件執行之動作。可能的值為: 

discard 會捨棄郵件。這是預設。

report 動作會將電子信箱名稱、UID 有效性與 UID 列印至 stdout。

archive 會以 Sun Compliance and Content Management System 進行郵件歸檔,然後捨棄該郵件。

fileinto: folder 動作會將郵件放置於特定資料夾中。共用資料夾字首可用以將郵件放置於其他使用者所擁有的資料夾中。

exclusive

指定此規則是否為專用規則。如果指定為 exclusive,則僅將此規則套用至指定的電子信箱,而忽略其他所有規則。如果存在一個以上的專用規則,則將使用最後載入的專用規則。例如,如果全域專用規則和本機專用規則均已指定,則將使用本機規則。如果有多個的全域專用規則,則使用由 configutil 列出的最後一個全域規則。(1/0)

folderpattern

指定受此規則影響的資料夾。格式必須以 user/ 開頭,代表目錄 store_root/partition/*/。請參閱表 20–9。(POSIX 常規表示式)

messagecount

資料夾中郵件的最大數目。隨著其他郵件被遞送,最舊的郵件會被永久刪除。(整數) 

foldersize

遞送其他郵件時最舊的郵件被永久刪除之前的資料夾空間上限。(以位元組為單位的整數) 

messagedays

郵件在被永久刪除之前的存在時間 (以天為單位)。(整數) 

messagesize

郵件被標記為已永久刪除前的最大大小 (以位元組為單位)。(整數) 

messagesizedays

寬限期。超出大小限制的郵件保留在資料夾中的天數。(整數) 

messageheader.header

指定將郵件標記為移除的標頭欄位和字串。值不區分大小寫,並且無法識別常規表示式。範例:Rule1.messageheader.Subject: Get Rich Now!

對於標頭 ExpiresExpiry-Date,如果在這些標頭欄位中指定的日期值早於 messagedays 屬性所對應的日期,則 imexpire 將移除郵件。如果指定多個過期標頭欄位,則將使用最早的過期日期。(字串)。

regexp

建立規則時啟用 UNIX 常規表示式。(1 或 0)。如果未指定,將使用 IMAP 表示式。 

savedays

郵件在遭到永久刪除前儲存於資料夾中的天數。 

seen

seen 是當使用者開啟郵件時,由系統設定的郵件狀態旗標。若將屬性 seen 設定為 and,則郵件必須已讀取並且必須符合其他條件,才能實作此規則。若將屬性 seen 設定為 or,則郵件只需被讀取符合其他條件,即可實作此規則。(and/or)。

sieve

用以指定郵件選取條件的篩選規則。範例:Rule17.sieve: header :contains “Subject” “Vigara”

deleted

deleted 是當使用者刪除郵件時,由系統設定的郵件狀態旗標。若將屬性 deleted 設定為 and,則郵件必須被刪除並且必須符合其他條件,才能實作此規則。若將屬性 deleted 設定為 or,則郵件只需被讀取符合其他條件,即可實作此規則。(and/or)

本土化電子信箱名稱

IMAP 協定會指定電子信箱名稱使用修改過的 UTF-7 編碼。Messaging Server 支援外部介面的本土化字元集,因此電子信箱名稱可進行本土化。但在內部作業時,系統會將本土化名稱轉換為 UTF-7。因此,用戶端上具有本土化電子信箱名稱的資料夾,將具有 UTF-7 格式的對應電子信箱檔案名稱。(請注意,IMAP 錯誤訊息會以 UTF-7 輸出電子信箱名稱,而非使用本土化字元集。)

一般而言,大部分需要電子信箱名稱的郵件儲存公用程式皆具有選項旗標而可設定成使用其他字元集,但它們仍預期名稱應以本土化字元集顯示。這些公用程式包括 reconstructmboxutilimsbackupimsrestorehashdir。但 imexpire 則要求電子信箱名稱必須使用 UTF-7,如屬性 folderpattern 所指定。使用本土化名稱無法運作。

若要取得 imexpire 的適當 folderpattern,可能必須將本土化電子信箱名稱轉換為修改過的 UTF-7 對等項目。使用 mboxutil -E 指令可執行此作業,如下所示:

顯示本土化檔名與修改過的 UTF-7 檔名之 mboxutil。

第一個 mboxutil 顯示本土化檔名。第二個 mboxutil 以修改過的 UTF-7 顯示檔名。您也可以使用 IMAP 清單指令:

IMAP 清單指令

以文字形式設定 imexpire 規則

透過在 store.expirerule 檔案中指定規則來設定自動移除郵件規則。store.expirerule 檔案中的每一行包含一個過期條件。全域規則配置檔案 (msg-svr-base/data/store/store.expirerule) 的過期條件格式如下:

rule_name.attribute : value

使用者或電子信箱規則配置檔案的過期規則格式如下:

attribute: value

範例 20–4 顯示 msg-svr-base/config/store.expirerule 中的一組全域過期規則。

Rule 1 設定全域過期策略 (即套用至所有郵件的策略),內容如下:

Rule 2 為 siroe.com 託管網域中的使用者設定自動移除郵件策略。它限制電子信箱的容量不得超過 1 兆位元組,移除已刪除的郵件,並移除存放時間超過 14 天的郵件。

Rule 3 為使用者 f.dostoevskiinbox 資料夾中的郵件設定自動移除郵件策略。它會移除主旨行中包含「On-line Casino」字句的郵件。


範例 20–4 imexpire 規則範例


Rule1.regexp: 1
Rule1.folderpattern: user/.*
Rule1.messagesize: 100000
Rule1.messagesizedays: 3
Rule1.deleted: or
Rule1.Subject: Vigara Now!
Rule1.Subject: XXX Porn!
Rule1.messagecount: 1000
Rule1.messagedays: 365
Rule2.regexp: 1
Rule2.folderpattern: user/.*@siroe.com/.*Rule2.exclusive: 1
Rule2.deleted: or
Rule2.messagedays: 14
Rule2.messagecount: 1000
Rule3.folderpattern: user/f.dostoevski/inboxRule3.Subject: *On-line Casino*
                  

設定 imexpire 資料夾式樣

可透過將 imexpire 屬性 regex 設定為 1,將資料夾式樣指定為使用 POSIX 常規表示式。如果未指定,則將會使用 IMAP 表示式。此格式必須以 user/ 開頭,後跟式樣。表 20–9 顯示各種資料夾的資料夾式樣。)

表 20–9 使用常規表示式的 imexpire 資料夾式樣

資料夾式樣 

範圍 

user/userid/.*

將規則套用至 userid 下所有資料夾中的所有郵件。

user/userid/Sent

將規則套用至 useridSent 資料夾中的郵件:

user/.*

將規則套用至全部郵件儲存。 

user/.*/trash

將規則套用至所有使用者的 trash 資料夾。

user/.*@siroe.com/.*

將規則套用至託管網域 siroe.com 中的資料夾: 

user/[^@]*/.*

將規則套用至預設網域中的資料夾。 

20.9.2.3 排程自動移除郵件和記錄層級

「自動移除郵件」由 imsched 排程常駐程式啟動。依預設,imsched 會在每晚 23:00 時呼叫 imexpire,以永久刪除並清除郵件。您可以設定表 20–10 中所述的 configutil 參數 local.schedule.expirestore.cleanupage,以自訂此排程。

對於大型郵件儲存來說,過期清除作業可能會耗時甚久,因此您也許會想要先測試一下全程所花的時間以便決定多久執行一次這些程序。例如,如果過期/清除循環需耗時 10 小時,則預設的每日執行一次過期清理也許就不太合適。排程會使用 imexpire 指令與自動作業排程參數執行過期與清除作業 (請參閱4.6 排程自動作業)。例如:


configutil -o local.schedule.expire -v "0 1 * * 6 /opt/SUNWmsgsr/sbin/imexpire -e"
configutil -o local.schedule.mspurge -v "0 23 * * * /opt/SUNWmsgsr/sbin/imexpire -c"

在此範例中,郵件會在每星期六凌晨 1 點過期,並於每晚 11 點清除。若未設定清除排程,imexpire 將會在過期後執行清除。

表 20–10 過期和清除 configutil 記錄和排程參數

參數 

說明 

local.schedule.expire

執行 imexpire 的間隔。使用 UNIX crontab 格式:minute hour day-of-month month-of-year day-of-week

數值均以空格或定位鍵分隔,範圍可以是 0-59、0-23、1-31、1-12 與 0-6 (0=星期日)。每個時間欄位都可以填入星號 (代表所有合法數值)、一列以逗號分隔的數值,或是範圍 (兩個以破折號連接的數值)。請注意,此處的日期可以用月份中的日期或每週第幾日的格式來指定,但是這兩者通常不一起使用,因為某日剛好又是星期幾的機率甚低。如果指定了這兩種格式,則必須在兩者都符合時才會執行作業。例如,設定為每月 17 日及星期二執行,則這兩個值必須均符合時才會執行作業。 

請注意,imexpire 也可以分別與 -e-c 旗標搭配使用,而僅執行過期或清除作業。請參閱「Sun Java System Messaging Server 6.3 Administration Reference」中的「imexpire」

間隔範例:

1) 在夜間 12:30、上午 8:30 以及下午 4:30 執行 imexpire

30 0,8,16 * * * /opt/SUNWmsgsr/sbin/imexpire

2) 每個工作日的凌晨 3:15 執行 imexpire

15 3 * * 1-5 /opt/SUNWmsgsr/sbin/imexpire

3) 僅在星期一執行 imexpire

0 0 * * 1 /opt/SUNWmsgsr/sbin/imexpire

預設值: 

0 23 * * * /opt/SUNWmsgsr/sbin/imexpire

若要停用:將 local.schedule.expire.enable 設為 NO

store.cleanupage

purge 將其永久移除之前,過期的或已永久刪除的郵件的存在時間 (以小時為單位)。

預設值:無 

local.store.expire.loglevel

指定記錄層級: 

1 = 記錄整個過期階段作業的摘要。 

2 = 為每個過期的電子信箱記錄一則訊息。 

3 = 為每封過期的郵件記錄一則訊息。 

預設值:1 

設定 imexpire 記錄層級

imexpire 將在作業完成後將摘要記錄到預設的記錄檔中。如果您從指令行呼叫過期,則可以使用 -v (詳細) 和 -d (除錯) 選項來指示 imexpire 將詳細的狀態/除錯訊息記錄到 stderr 中。若以 imsched 呼叫 imexpire,則 configutil 參數 local.store.expire.loglevel 可以設定為 1、2 或 3,以取得不同的記錄層級。記錄層級 1 是預設值,它將記錄整個過期階段作業的摘要。記錄層級 2 將為每個過期的電子信箱記錄一則訊息。記錄層級 3 將為每個過期的郵件記錄一則訊息。

從自動移除郵件中排除指定的使用者

msg-svr-base/config/ 中名為 expire_exclude_list 的檔案中,增加指定使用者的使用者 ID (每行各一),將其排除在過期規則之外。或在使用者的電子信箱下配置虛擬專用過期規則。