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

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

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

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


備註 –

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


imexpire 的運作原理

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


備註 –

儘管可以透過主控台或 configutil 指令也可指定全域過期規則,但使用 store.expirerule 還是首選方法。如果使用主控台或 configutil 建立太多規則,可能會導致效能問題。


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

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

佈署自動移除郵件功能

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

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

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

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

定義自動移除郵件的策略

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

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

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

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

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

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

郵件資料夾。可讓您指定要移除其中郵件的資料夾。屬性:folderpattern


備註 –

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


自動移除郵件策略的範例

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

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

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

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

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

若要實作前一節中定義的自動移除郵件策略,您必須設定 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 2005Q4 Administration Reference」中的「configutil Parameters」)。現在仍可使用,但是不再支援使用標頭限制的過期規則 (例如使具有特定主旨行的郵件過期)。不論何時,最好皆使用 store.expirerule 指定所有的過期規則。


表 18–8 imexpire 屬性

屬性 

說明 (屬性值) 

exclusive

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

folderpattern

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

messagecount

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

foldersize

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

messagedays

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

messagesize

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

messagesizedays

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

郵件標頭欄位

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

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

regexp

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

seen

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

deleted

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

以文字形式設定 imexpire 規則

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

rule_name.attribute : value

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

attribute: value

範例 18–1 會顯示 msg_svr_base/config/store.expirerule 中的一組全域過期規則。

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

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

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


範例 18–1 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/ 開頭,後跟式樣。表 18–9 顯示各種資料夾的資料夾式樣。)

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

資料夾式樣 

範圍 

user/userid/.*

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

user/userid/Sent

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

user/.*

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

user/.*/trash

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

user/.*@siroe.com/.*

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

user/[^@]*/.*

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

Procedure使用主控台設定全域自動移除郵件規則

請注意,儘管可以使用主控台設定全域過期規則,但建議還是優先使用 store.expirerule。如果使用主控台或 configutil 建立太多規則,可能會導致效能問題。

步驟
  1. 帶出自動移除郵件 GUI,如下所示:

    主控台 > 伺服器群組 > Messaging Server (開啟) >Messaging Server 主控台 > [配置] 標籤 > 郵件儲存 > 過期/清除 > 新增

    圖 18–4 顯示了 GUI 的簡圖。

    圖 18–4 自動移除郵件 (過期/清除) GUI—簡圖

    本圖顯示相應的自動移除郵件 GUI 簡圖。

  2. 輸入新規則的名稱。

  3. 輸入將從中自動移除郵件的資料夾。

    請參閱上述設定 imexpire 資料夾式樣

  4. 對於符合指定條件的資料夾來說,如果此規則為專用規則,請核取 [專用] 方塊。

    如果核取此方塊,則此規則的優先順序將高於符合指定式樣的其他所有規則。請參閱表 18–8 以取得有關 [專用] 核取方塊的詳細資訊。

  5. 若要根據資料夾大小建立規則,請執行以下動作:

    • 核取 [資料夾大小限制] 核取方塊。在 [郵件計數] 欄位中,指定系統移除最舊的郵件之前將在資料夾中保留的最大郵件數目。在 [資料夾大小] 欄位中,指定系統移除最舊郵件之前的資料夾大小上限 (以位元組為單位)。

  6. 若要根據郵件存在時間建立規則,請核取 [郵件存在時間限制] 核取方塊:

    在 [天數] 欄位中,指定郵件保留在資料夾中的時間 (以天為單位)。

  7. 根據郵件大小建立規則:

    • 核取 [郵件大小限制] 核取方塊。在 [郵件大小限制] 欄位中,輸入資料夾中允許的郵件大小上限。在 [寬限期] 欄位中,輸入超出大小限制的郵件在移除之前保留在資料夾中的時限。

  8. 根據是否已設定 Seen 或 Deleted 郵件旗標來建立規則:

    • 核取 [郵件旗標限制] 核取方塊。

    • 對於 Seen: 欄位,選取「和」指定郵件必須已讀取並且必須符合其他條件,才能實作此規則。選取「或」指定郵件只需已讀取符合其他條件,即可實作此規則。

    • 對於 Deleted: 欄位,選取「和」指定郵件必須已刪除並且必須符合其他條件,才能實作此規則。選取「或」指定郵件只需被刪除符合其他條件,即可實作此規則。

  9. 根據標頭欄位及它們的值建立規則:

    • 核取 [標頭限制] 核取方塊。

    • 輸入以逗號分隔的標頭和值的清單,格式如下:

      header1: value1, header2 : value2

      範例:Subject: Work at Home!,From: virus@sesta.com

      對於標頭中包含 ExpiresExpiry-Date 的郵件,如果這兩個值早於 [郵件存在時間限制] 中的日期值,則系統將移除該郵件。如果指定多個過期標頭欄位,則將使用最早的過期日期。(字串)。

  10. 按一下 [確定] 以將新規則加入自動移除郵件清單。

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

imsched 排程常駐程式啟動自動移除郵件。依預設,imsched 會在每晚 23:00 時呼叫 imexpire,以永久刪除並清除郵件。可透過設定表 18–10 中說明的 configutil 參數 local.schedule.expirelocal.schedule.purgestore.cleanupage 來自訂此排程。

對於大型郵件儲存來說,過期清除作業可能會耗時甚久,因此您也許會想要先測試一下全程所花的時間以便決定多久執行一次這些程序。例如,如果過期/清除循環需耗時 10 小時,則預設的每日執行一次過期清理也許就不太合適。您可以使用 local.schedule.purge 來指定單獨的清除排程,以便排程過期和清除。如果未設定 local.schedule.purge,則 imexpire 將在郵件過期後直接執行清除。

表 18–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 日及星期二執行,則這兩個值必須均符合時才會執行作業。 

間隔範例:

1) 在夜間 12:30、上午 8:30 以及下午 4:30 執行 imexpire 30 0,8,16 * * * /opt/SUNWmsgsr/lib/imexpire

2) 每個工作日的凌晨 3:15 執行 imexpire15 3 * * 1-5 /opt/SUNWmsgsr/lib/imexpire

3) 僅在星期一執行 imexpire0 0 * * 1 /opt/SUNWmsgsr/lib/imexpire

預設:0 23 * * * /opt/SUNWmsgsr/lib/imexpire

local.schedule.purge

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

預設:0 0,4,8,12,16,20 * * * /opt/SUNWmsgsr/lib/purge -num=5 (每四個小時) 

store.cleanupage

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

預設:無 

local.store.expire.loglevel

指定記錄層級: 

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

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

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

預設:1 

使用主控台進行排程的 imexpire

帶出自動移除郵件 GUI,如下所示:

主控台 > 伺服器群組 > Messaging Server (開啟) >Messaging Server 主控台 > [配置] 標籤 > 郵件儲存 > 過期/清除

此主控台頁面在開始時列出過期規則,而在結束時列出過期與清除排程。若要排程過期和清除,請使用 [過期/清除排程] 中的下拉式功能表,為過期和清除作業設定執行的月份、日期、星期幾 (0 = 星期日) 以及時間。


備註 –

日期值可以用當月第幾日或是星期幾來設定。如果兩者均有設定,則這兩個條件都必須滿足。若您設定了每週第 3 天 (星期三) 以及每月 17 日,則過期/清除作業將僅在當月 17 日又剛好是星期三時執行。


設定 imexpire 記錄層級

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

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

透過將特定使用者的使用者 ID 增加 (每行一個) 至 msg_svr_base/config/ 中名為 expire_exclude_list 的檔案中,將其排除在過期規則之外。