Sun Java System Messaging Server 6.3 管理ガイド

20.9.2 自動メッセージ削除機能を配備する

自動メッセージ削除には 3 つの手順が必要です。

  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

サイズ超過メッセージの存続期間: X バイトを超えるメッセージを Y 日間の猶予期間後に自動的に削除します。属性: messagesize および messagesizedays

開封済みおよび削除済みメッセージフラグ: 開封済み」または「削除済み」フラグが付いているメッセージを自動的に削除します。これらの条件には、「and」または「or」が設定できます。or に設定した場合、メッセージに開封済みまたは削除済みフラグが付いていると、ほかの条件にかかわらず自動削除されます。and に設定した場合、メッセージに付いている開封済みまたは削除済みフラグは、指定したほかの条件すべてを満たした場合に設定されます。属性: seen および deleted

メッセージのヘッダーフィールド: メッセージを削除する条件としてヘッダーおよび文字列を指定できます。たとえば、「Subject: Work from Home!」というヘッダーがあるメッセージをすべて削除できます。

メッセージのフォルダ: メッセージを削除するフォルダを指定できます。属性: folderpattern。この属性だけは、modified UTF-7 形式の文字セットを使用します。


注 –

imexpire を使用して、メッセージが開封されてからの期間に基づいてメッセージを削除または保存することはできません。たとえば、200 日経過しても読まれていないメッセージを削除するという指定はできません。


自動メッセージ削除ポリシーの例

例 1: 1,000 件を超えるメッセージが存在するフォルダ内の、存続期間が 365 日のメッセージをすべて削除します。

例 2: ドメイン siroe.com 内の、存続期間が 180 日を超えるメッセージを削除します。

例 3: 「削除済み」のマークが付いているメッセージをすべて削除します。

例 4: sesta.com 内の 1,000 件を超えるメッセージが存在するフォルダから、「開封済み」マークが付いていて、存続期間が 30 日より長く、サイズが 100K バイトより大きく、X-spam というヘッダーが付いたメッセージを削除します。

20.9.2.2 自動メッセージ削除ポリシーを実装するルールを設定する

前の節で定義した自動メッセージ削除ポリシーを実装するには、imexpire ルールを設定する必要があります。ルールを設定するには、ルールを store.expirerule ファイルに追加します。2 つの store.expirerule グローバルルールの例を次に示します。


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

            

この例では、Rule 1 でごみ箱フォルダ内のすべてのメッセージが 2 日後に削除されることを指定しています。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 を標準出力に出力します。

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!

Expires ヘッダーや Expiry-Date ヘッダーについては、これらのヘッダーフィールドで指定された日付の値が messagedays 属性よりも古い場合、imexpire によってそのメッセージは削除されます。有効期限に関するヘッダーフィールドが複数指定された場合、もっとも古い有効期限が使用されます。(文字列)。

regexp

UNIX 正規表現をルール作成において有効にします。(1 または 0)。この属性を指定しないと、IMAP 表現が使用されます。 

savedays

メッセージがフォルダに保存されてから削除されるまでの日数です。 

seen

seen はメッセージのステータスフラグの 1 つであり、ユーザーがメッセージを開いたときにシステムによって設定されます。seen 属性が and に設定されている場合、メッセージが開封済みであり、かつ、ほかの条件が満たされていればルールは適用されます。seen 属性が or に設定されている場合、メッセージが開封済みであるか、または、もう 1 つの条件が満たされていればルールは適用されます。(and/or)。

sieve

メッセージ選択条件を指定する Sieve ルールです。例: Rule17.sieve: header :contains "Subject" "Vigara"

deleted

deleted はメッセージのステータスフラグの 1 つであり、ユーザーがメッセージを削除したときにシステムによって設定されます。属性 deletedand に設定されている場合、メッセージが削除済みであり、かつ、もう 1 つの条件が満たされていればルールは適用されます。deleted 属性が or に設定されている場合、メッセージが開封済みであるか、または、もう 1 つの条件が満たされていればルールは適用されます。(and/or)

action

 

ローカライズされたメールボックス名

IMAP プロトコルでは、メールボックス名に modified UTF-7 形式のエンコーディングを使用するように規定されています。Messaging Server は、メールボックス名をローカライズできるように、外部インタフェース上のローカライズされた文字セットをサポートします。ただし、システムの内部ではローカライズされた名前が UTF-7 に変換されるため、クライアント上でローカライズされたメールボックス名を持つフォルダには、それに対応する UTF-7 形式のメールボックスファイル名が設定されます。(IMAP のエラーメッセージでは、ローカライズされた文字セットではなく、UTF-7 形式でメールボックス名が出力されます。)

一般に、メールボックス名を必要とするほとんどのメッセージストアユーティリティーでは、ローカライズされた文字セットによるメールボックス名が想定されていますが、異なる文字セットを使用できるようにするオプションフラグが用意されている場合もあります。これらのユーティリティーには、reconstructmboxutilimsbackupimsrestorehashdir などがあります。ただし、imexpire では、folderpattern 属性として指定するメールボックス名を UTF-7 形式にする必要があります。ローカライズされた名前を使用すると機能しません。

imexpire に使用する適切な folderpattern を取得するには、ローカライズされたメールボックス名を modified UTF-7 形式に変換する必要がある場合があります。この作業は、次のように mboxutil -E コマンドを使用して行います。

mboxutil で、ローカライズされたファイル名と modified UTF-7 形式のファイル名を表示する。

1 つ目の mboxutil では、ローカライズされたファイル名が表示されています。2 つ目の mboxutil では、modified UTF-7 形式のファイル名が表示されています。次のように、IMAP の list コマンドを使用することもできます。

IMAP の list コマンド

imexpire ルールをテキストモードで設定する

自動メッセージ削除ルールは、store.expirerule ファイルにルールを指定することによって設定します。store.expirerule ファイルは、1 行につき 1 つの有効期限条件を含みます。グローバルルール設定ファイル (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 のユーザーに対して自動メッセージ削除ポリシーを設定しています。メールボックスサイズを 1M バイトに制限し、削除済みメッセージを削除し、存続期間が 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 フォルダパターンを設定する

フォルダパターンは POSIX 正規表現を使用して指定できます。このためには、imexpire 属性の regex を 1 に設定します。この属性を指定しないと、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/[^@]*/.*

デフォルトドメイン内のフォルダに規則を適用します。 

20.9.2.3 自動メッセージ削除とログレベルをスケジュールする

自動メッセージ削除は、imsched スケジューリングデーモンによってアクティブになります。デフォルトでは、imsched は毎日 23:00 に imexpire を呼び出し、メッセージは消去および消去されます。このスケジュールは、configutil パラメータの local.schedule.expire および store.cleanupage を設定することによってカスタマイズできます。表 20–10 を参照してください。

有効期限および消去は、大きなメッセージストアでは完了するまでに時間のかかることがあるので、これらのプロセスの実行頻度は実験して決定することをお勧めします。たとえば、有効期限および消去の 1 サイクルに 10 時間かかる場合、有効期限および消去のデフォルトスケジュールを 1 日に 1 回とするわけにはいきません。有効期限および消去をスケジュールするには、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 の書式を使用します。分 時 日付 月 曜日

値は空白文字またはタブ文字で区切られ、値の範囲は、分は 0 〜 59、時は 0 〜 23、日付は 1 〜 31、月は 1 〜 12、曜日は 0 〜 6 (0 = 日曜日) となります。各時間フィールドには、アスタリスク (すべての取りうる値)、コンマ区切りの値のリスト、またはハイフンで区切られた 2 つの値による範囲を使用することもできます。日は、「日」と「曜日」の両方で指定できることに注意してください。ただし、このような発生回数は非常に少ないので、通常、両方で指定することはありません。日と曜日の両方で指定した場合、その両方が必須条件になります。たとえば、17 日と火曜日を設定すると、両方の値が真であることが求められます。 

imexpire-e フラグおよび -c フラグを指定して、それぞれ有効期限切れのみ、および消去のみを実行することもできます。『Sun Java System Messaging Server 6.3 Administration Reference』「imexpire」を参照してください。

実行間隔の例

1) imexpire を 12:30am、8:30am、4:30pm に実行する場合 30 0,8,16 * * * /opt/SUNWmsgsr/sbin/imexpire

2) imexpire を平日の朝 3:15am に実行する場合 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.enableNO に設定します。

store.cleanupage

purge で完全に削除するまでの、有効期限が切れた、または消去されたメッセージの存続期間 (時間数) です。

デフォルト: なし 

local.store.expire.loglevel

ログのレベルを指定します。 

1 = expire セッション全体の要約をログに記録します。 

2 = 有効期限が切れたメールボックスごとに 1 メッセージをログに記録します。 

3 = 有効期限が切れたメッセージごとに 1 メッセージをログに記録します。 

デフォルト: 1 

imexpire ログレベルを設定する

imexpire が完了すると、デフォルトのログファイルに要約が記録されます。有効期限をコマンド行から呼び出す場合は、-v (詳細) および -d (デバッグ) の各オプションを使用して、詳細ステータスまたはデバッグメッセージを stderr に記録するように imexpire に指示できます。imsched を使用して imexpire を呼び出す場合は、configutil パラメータの local.store.expire.loglevel を 1、2、または 3 に設定して各ログレベルを選択できます。Loglevel 1 はデフォルトで、有効期限セッション全体の要約が記録されます。Loglevel 2 では、有効期限切れのメールボックスごとに 1 つのメッセージが記録されます。Loglevel 3 では、有効期限切れのメッセージごとに 1 つのメッセージが記録されます。

自動メッセージ削除から指定されたユーザーを除外する

msg-svr-base/config/ 内の expire_exclude_list ファイルで、1 行に 1 つずつユーザー ID を追加して、指定したユーザーを有効期限ルールから除外できます。または、ユーザーのメールボックスの下に、ダミーの排他的な有効期限ルールを設定します。