自動移除郵件需要三個步驟:
定義自動移除郵件的策略:哪些郵件將被自動移除?哪些使用者、資料夾、網域及分割區可以自動移除郵件?哪些大小、郵件存在時間及標頭將定義移除條件。定義要移除的郵件範圍。請參閱20.9.2.1 定義自動移除郵件的策略
指定實作此策略的 imexpire 規則。請參閱20.9.2.2 設定實作自動移除郵件策略的規則
指定 imexpire 排程。請參閱20.9.2.3 排程自動移除郵件和記錄層級
透過指定移除條件來定義您的自動移除郵件策略。imexpire 允許使用下列條件定義移除:
郵件的存在時間。自動移除超過 X 天的郵件。屬性:messagedays。
郵件計數。自動移除超出 X 封郵件的資料夾中的郵件。屬性:messagecount。
超出大小限制的郵件的存在時間。在 Y 天寬限期之後自動移除超過 X 位元組的郵件。屬性:messagesize 與 messagesizedays。
已讀取和已刪除郵件旗標。自動移除設定已讀取或已刪除旗標的郵件。這些條件可設定為「and」或「or」。若設定為 or,則郵件的已讀取/已刪除旗標將導致自動刪除,無論其他條件為何。若設定為 and,則郵件的已讀取/已刪除旗標必須設定為同時滿足其他所有指定的條件。屬性:seen 與 deleted。
郵件的標頭欄位。可讓您指定標頭和字串作為移除郵件的條件。例如,移除標頭中含有「主旨︰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。
若要實作前一節中定義的自動移除郵件策略,您必須設定 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 來指定所有過期規則。
規則在名為 store.expirerule 的檔案中指定。
多個過期條件可使用相同的規則指定。(以上範例)。
規則可以套用至整個郵件儲存 (全域規則)、分割區、使用者或資料夾。
全域規則儲存在 msg-svr-base/config/store.expirerule 中
每個電子信箱都會檢查所有全域規則,這可能導致一些處理經常性耗用時間 (取決於您指定的全域規則數目)。因此,您不應在全域規則檔案中指定分割區、電子信箱或使用者規則。一般來講,您不應試圖在此檔案中放置超過所需數目的過期規則。
分割區規則儲存於 store_root/partition/partition_name/store.expirerule 中。
使用者規則必須在 store_root/partition/partition_name/userid/store.expirerule 中指定,或藉由將 folderpattern 規則指定為 user/userid/.* 進行指定
資料夾規則必須在 store_root/partition/partition_name/userid/folder/store.expirerule 中指定,或藉由將 folderpattern 規則指定為user/userid /folder 進行指定
請注意,有多項使用 rule_name 的非全域規則 (使用者、資料夾、分割區) 只能在 Messaging Server 6.2p4 版本或更新版本中實作。
多個過期規則可同時套用至一個電子信箱。電子信箱的過期策略由全域規則和本機規則組成。本機規則可套用至某個目錄及其所有子資料夾下的電子信箱。
imexpire 可使套用至電子信箱的所有過期規則都相同,除非有特別為此電子信箱指定的專用規則 (請參閱表 20–8)。產生的規則集會根據所有適用的規則,總結出最嚴格的過期策略。例如,如果規則 X 規定最長郵件時限是 10 天,規則 Y 指定的卻是 5 天,則結合兩者得出的規則將是 5 天。
屬性 |
說明 (屬性值) |
---|---|
指定要對過期規則所發現的郵件執行之動作。可能的值為: discard 會捨棄郵件。這是預設。 report 動作會將電子信箱名稱、UID 有效性與 UID 列印至 stdout。 archive 會以 Sun Compliance and Content Management System 進行郵件歸檔,然後捨棄該郵件。 fileinto: folder 動作會將郵件放置於特定資料夾中。共用資料夾字首可用以將郵件放置於其他使用者所擁有的資料夾中。 |
|
指定此規則是否為專用規則。如果指定為 exclusive,則僅將此規則套用至指定的電子信箱,而忽略其他所有規則。如果存在一個以上的專用規則,則將使用最後載入的專用規則。例如,如果全域專用規則和本機專用規則均已指定,則將使用本機規則。如果有多個的全域專用規則,則使用由 configutil 列出的最後一個全域規則。(1/0) |
|
指定受此規則影響的資料夾。格式必須以 user/ 開頭,代表目錄 store_root/partition/*/。請參閱表 20–9。(POSIX 常規表示式) |
|
資料夾中郵件的最大數目。隨著其他郵件被遞送,最舊的郵件會被永久刪除。(整數) |
|
遞送其他郵件時最舊的郵件被永久刪除之前的資料夾空間上限。(以位元組為單位的整數) |
|
郵件在被永久刪除之前的存在時間 (以天為單位)。(整數) |
|
郵件被標記為已永久刪除前的最大大小 (以位元組為單位)。(整數) |
|
寬限期。超出大小限制的郵件保留在資料夾中的天數。(整數) |
|
messageheader.header |
指定將郵件標記為移除的標頭欄位和字串。值不區分大小寫,並且無法識別常規表示式。範例:Rule1.messageheader.Subject: Get Rich Now! 對於標頭 Expires 和 Expiry-Date,如果在這些標頭欄位中指定的日期值早於 messagedays 屬性所對應的日期,則 imexpire 將移除郵件。如果指定多個過期標頭欄位,則將使用最早的過期日期。(字串)。 |
regexp |
建立規則時啟用 UNIX 常規表示式。(1 或 0)。如果未指定,將使用 IMAP 表示式。 |
郵件在遭到永久刪除前儲存於資料夾中的天數。 |
|
seen 是當使用者開啟郵件時,由系統設定的郵件狀態旗標。若將屬性 seen 設定為 and,則郵件必須已讀取並且必須符合其他條件,才能實作此規則。若將屬性 seen 設定為 or,則郵件只需被讀取或符合其他條件,即可實作此規則。(and/or)。 |
|
用以指定郵件選取條件的篩選規則。範例:Rule17.sieve: header :contains “Subject” “Vigara” |
|
deleted 是當使用者刪除郵件時,由系統設定的郵件狀態旗標。若將屬性 deleted 設定為 and,則郵件必須被刪除並且必須符合其他條件,才能實作此規則。若將屬性 deleted 設定為 or,則郵件只需被讀取或符合其他條件,即可實作此規則。(and/or) |
IMAP 協定會指定電子信箱名稱使用修改過的 UTF-7 編碼。Messaging Server 支援外部介面的本土化字元集,因此電子信箱名稱可進行本土化。但在內部作業時,系統會將本土化名稱轉換為 UTF-7。因此,用戶端上具有本土化電子信箱名稱的資料夾,將具有 UTF-7 格式的對應電子信箱檔案名稱。(請注意,IMAP 錯誤訊息會以 UTF-7 輸出電子信箱名稱,而非使用本土化字元集。)
一般而言,大部分需要電子信箱名稱的郵件儲存公用程式皆具有選項旗標而可設定成使用其他字元集,但它們仍預期名稱應以本土化字元集顯示。這些公用程式包括 reconstruct、mboxutil、imsbackup、imsrestore 與 hashdir。但 imexpire 則要求電子信箱名稱必須使用 UTF-7,如屬性 folderpattern 所指定。使用本土化名稱無法運作。
若要取得 imexpire 的適當 folderpattern,可能必須將本土化電子信箱名稱轉換為修改過的 UTF-7 對等項目。使用 mboxutil -E 指令可執行此作業,如下所示:
第一個 mboxutil 顯示本土化檔名。第二個 mboxutil 以修改過的 UTF-7 顯示檔名。您也可以使用 IMAP 清單指令:
透過在 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 設定全域過期策略 (即套用至所有郵件的策略),內容如下:
建立規則時啟用 UNIX 常規表示式。
3 天後移除超過 100,000 位元組的郵件。
移除使用者刪除的郵件。
移除 [主旨︰] 標頭中帶有字串「Vigara Now!」或「XXX Porn!」的 參數。
限制所有資料夾的郵件數不得高於 1,000 封。超過 1,000 封郵件時,系統將移除最舊的郵件以便將總數維持在 1,000 封。
移除所有存放時間超過 365 天的郵件。
Rule 2 為 siroe.com 託管網域中的使用者設定自動移除郵件策略。它限制電子信箱的容量不得超過 1 兆位元組,移除已刪除的郵件,並移除存放時間超過 14 天的郵件。
Rule 3 為使用者 f.dostoevski 的 inbox 資料夾中的郵件設定自動移除郵件策略。它會移除主旨行中包含「On-line Casino」字句的郵件。
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 屬性 regex 設定為 1,將資料夾式樣指定為使用 POSIX 常規表示式。如果未指定,則將會使用 IMAP 表示式。此格式必須以 user/ 開頭,後跟式樣。表 20–9 顯示各種資料夾的資料夾式樣。)
表 20–9 使用常規表示式的 imexpire 資料夾式樣
資料夾式樣 |
範圍 |
---|---|
user/userid/.* |
將規則套用至 userid 下所有資料夾中的所有郵件。 |
user/userid/Sent |
將規則套用至 userid 下 Sent 資料夾中的郵件: |
user/.* |
將規則套用至全部郵件儲存。 |
user/.*/trash |
將規則套用至所有使用者的 trash 資料夾。 |
user/.*@siroe.com/.* |
將規則套用至託管網域 siroe.com 中的資料夾: |
user/[^@]*/.* |
將規則套用至預設網域中的資料夾。 |
「自動移除郵件」由 imsched 排程常駐程式啟動。依預設,imsched 會在每晚 23:00 時呼叫 imexpire,以永久刪除並清除郵件。您可以設定表 20–10 中所述的 configutil 參數 local.schedule.expire 與 store.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 記錄和排程參數
參數 |
說明 |
---|---|
執行 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。 |
|
在 purge 將其永久移除之前,過期的或已永久刪除的郵件的存在時間 (以小時為單位)。 預設值:無 |
|
指定記錄層級: 1 = 記錄整個過期階段作業的摘要。 2 = 為每個過期的電子信箱記錄一則訊息。 3 = 為每封過期的郵件記錄一則訊息。 預設值:1 |
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 (每行各一),將其排除在過期規則之外。或在使用者的電子信箱下配置虛擬專用過期規則。