メールルール処理の優先度に注意【Outlook】Tech TIPS

複数のメールルールを定義する場合、条件にマッチするルールが2つ以上あると、その順番や処理内容によっては意図したとおりに動作しないことがある。あるルールの適用後、ほかのルールを適用させたくない場合は、ルール処理を中断させるアクションを明示的に定義する必要がある。デフォルトのルールを表現するには、ルール定義リストの先頭に置くか、各ルールの最後に必ず処理の中断アクションを置くようにする。

» 2004年05月29日 05時00分 公開
「Tech TIPS」のインデックス

連載目次

メールルール処理の優先度に注意【Outlook】

対象ソフトウェア:Outlook 2003/Outlook Express


Outlookの「仕訳ルール」やOutlook Expressの「メッセージルール」とは

 Tech TIPS「メッセージルールを活用する(Outlook Express編)」では、メールの自動分類などに利用できる、メッセージルール(以下、Outlook 2003の「仕訳ルール」とまとめて、メールルールと呼ぶことにする)の使い方について解説した。メールルールとは、受信したメールがある「条件」にマッチした場合、指定された「アクション」を実行するというものである。

メールルールの例 メールルールの例
これはOutlook Expressのメールルール(Outlook Expressでは「メッセージルール」という)の例。ルールの一覧は[ツール]メニューの[メッセージ ルール]−[メール](Outlook Expressの場合)、もしくは[ツール]メニューの[仕訳ルールと通知](Outlook 2003の場合)で確認できる。
  (1)定義されたルールの一覧。
  (2)これをクリックすると、選択したルールの位置(優先度)が上へ移動する。上位にあるルールの方が先に処理される。
  (3)これをクリックすると、選択したルールの位置(優先度)が下へ移動する。
  (4)現在選択されているルールの内容。青字の部分をクリックすると、その値や条件などを変更できる。

 このように、メールルールは複数定義することができ、さまざま条件でフォルダに分類したり、削除したり、メールメッセージの表示色を変更したりできる。

 ところでこのダイアログを見ると、各ルールの順番(処理順序)を変更するための[上へ]と[下へ]という2つのボタンがある(画面中の(2)(3))。Outlook 2003の[仕訳ルールと通知]ダイアログにも同様に、ルールの並び順を変更するための[↑(上へ)]と[↓(下へ)]という2つのボタンが用意されている。あるルールを選択してからこれらのボタンをクリックすることにより、ルールの置かれる位置が変わり、その処理の順番が変更される。

複数メールルールの挙動に注意

 さてこのように複数のルールが定義されている場合、あるメールメッセージが2つ以上のルール(条件)にマッチしたとすると、どのように動作するだろうか。直感的には次の図のように、ある条件にマッチすると、それに該当するアクションが実行され、このメールに対する処理はそこで終了し(図中の「STOP」)、次のメールメッセージの処理(マッチする条件の検索とアクションの実行)へ移ると考えられる。

期待するメールルールの処理手順 期待するメールルールの処理手順
直感的には、複数のルールが定義されていても、最初に条件にマッチしたルールのアクションのみが実行され、そのメールメッセージに対する処理は終了すると考えられる。次のメールメッセージを取得後は、また一番上のメールルールから処理(マッチする条件の検索とアクションの実行)が行われる。1つのメールに適用されるルールは1つだけということである。

 あるメールメッセージがたとえ複数のルールにマッチするとしても(マッチするルールが複数定義されているとしても)、一番上にある1つのルールのみが実行されると考えられる。これは、例えばルータにおけるパケットフィルタの処理で行われている挙動である。ルータのパケットフィルタでは、ある特定のプロトコルやIPアドレス、ポート番号などで条件を定義し、それにマッチした場合は、パケットを通過させたり、ブロック(拒否/破棄)させたりする。例えばTCPの80番ポートに対するアクセスだけを許可すると、Webサーバに対するアクセスだけを許可できる。

 だがOutlook ExpressやOutlook 2003における実際のメールルールの処理は、このような動作にはなっていない。ある条件にマッチするルールを見つけると、そのアクションを実行した後、さらに次のルールとマッチするかどうかが調べられるのである。つまり、あるアクションを実行しても、メールルールの処理はそこでは終了せず、次のルールの処理へと進む。その結果、すべてのルールが処理され、条件にマッチすれば、そのアクションが実行される。これを図にすると、次のようになる。

実際のメールルールの処理手順 実際のメールルールの処理手順
ある条件にマッチするルールのアクションを実行しても処理はそこで終了中断せず、次のルールの処理(マッチする条件の検索とアクションの実行)が行われる。このようにしてすべてのルールに対して上から順番に処理が行われる。条件にマッチするメールが複数存在すれば、そのアクションはすべて実行される。

 もしあるメールにマッチするメールルールが1つしか定義されていなければ、このような挙動でも問題はない。メールはどれか1つの条件にかマッチせず、実行されるアクションもただ1つしかないからである。

 だがもし複数の条件にマッチするようなら、複数のアクションが実行されることになる。お互いに影響のないアクションならばそれらが順番に実行されるだけだが、同じ操作を行うアクションの場合は注意が必要である。例えばアクション1が「フォルダ1への移動」、アクション2が「フォルダ2への移動」ならば、受信したメールはまずフォルダ1へ移動するが、すぐにアクション2が適用され、最終的にはフォルダ2へ移動することになる。

ルールの実行を中断させるには

 このような事態を防ぎ、意図したとおりにルールを適用させるには、各アクションの最後で、それ以上の処理を中止させるという処理を行えばよい。Outlook Expressでは[ルールの処理を中止する]という処理を選択すればよいし、Outlook 2003の場合は[仕訳ルールの処理を中止する]という処理を選択する。デフォルトではこの処理は忘れがちなので、注意が必要である。

Outlook Expressにおける処理の中断ルール Outlook Expressにおける処理の中断ルール
あるルールのアクションを実行後、もうそれ以上ルールを適用させたくなければ、ルールの処理を明示的に中断させる必要がある。
  (1)必要なアクションのほかに、この[ルールの処理を中止する]というアクションも同時に選択する。
  (2)追加されたアクション。このアクションにより、これ以上のルールの条件検索は行われず、次のメールの処理へ移行する。

 Outlook 2003の場合もほぼ同様のアクションが用意されているので、それを利用する。Outlook 2003ではアイコンを使ってアクションの内容を分かりやすく表示しており、処理の中断は「×」印のような形のアイコンで表されている。

Outlook 2003における処理の中断ルール Outlook 2003における処理の中断ルール
Outlook 2003では、メールルールで利用可能な条件やアクションの数が多い。またアイコンを使って処理内容を表示するなど、分かりやすくなっている。
  (1)現在定義されているルール。ここでは1つだけ定義している。
  (2)アクションの内容を表すアイコン。これは指定したフォルダへの移動を表している。
  (3)これは現在のルールの処理後、後続のルールの適用を行わず、ここで処理を中断させるという意味のアイコン。次の(4)を選択すると表示される。
  (4)ルールの処理を中断し、これ以降のルールの適用をキャンセルするというアクション。
  (5)追加で指定されたアクション。

デフォルトルールの記述について

 ところで、メールルールを多数定義してメールを細かく各フォルダに分類したあと、それ以外のすべてのメール(どのルールにもマッチしないメール)をまとめて、例えば「未整理フォルダ」というフォルダに分類したいとする。分類フォルダの内容は、あとで必要に応じて手動で整理したり、まとめて削除したりすればよいだろう。

 このような処理を行うためには、どのルールにもマッチしない場合に実行される、デフォルトのメールルールを定義すればよい。具体的には、次のいずれかの方法が利用できる。

●方法1――すべてのアクションにおいて「処理の中断」を行う

 まずすべてのルールのアクション部において、その最後に「処理の中断」という動作を選択しておく。そしてルール定義リストの一番下(最後に実行されるルール)に、「すべてのメールに対して、未整理フォルダへ移動する」というルールを新たに定義すればよい。こうしておけば、条件がマッチしたアクションは実行されるが、その最後に処理の中断があるので、それ以上の処理は行われなくなる。そして、どの条件にもマッチしない場合に限って、最後のルールが適用されることになる。なお「すべてのメールに対して」という条件を指定するには、Outlook Expressでは[すべてのメッセージに適用する]というチェックボックスを選択する。Outlook 2003の場合は、仕分けルールの条件部において、チェックボックスを1つも選択しない状態にすればよい。こうするとすべてのメールにマッチするという条件になる。

 この方法は、いわば正攻法とでもいうべき方法であるが、いちいち各アクションの最後に「処理の中断」という動作を入れなければならない。もしそれを忘れていると、意図しない動作(分類したはずのメールがすべて未整理フォルダへ移動させられる)が起こる可能性があるので注意が必要である。そこで、次のような方法を使うのもよいだろう。

●方法2――デフォルトルールをルール定義リストの先頭に置く

 複数のルールが存在している場合、ルール定義リストの先頭から順番に実行され、同じ処理ならば後のルールの方が意味を持つ、という挙動を生かしたのがこの方法である。「すべてのメールに対して、未整理フォルダへ移動する」というルールを定義リストの先頭に挿入しておく。当然このルールは最初に実行されるが、もし後続のルールにマッチしてフォルダ移動が行われれば、そちらが意味を持つ。この結果、後続のどのルールにもマッチしない場合に限って、未整理フォルダへ移動することになる。方法1と違って、各ルールの最後に「処理の中断」という動作を入れなくてもよいし、もし入れ忘れたとしても、動作には影響はない。

特定のメールに色を付けることも可能

 以上の方法を組み合わせれば、もっと複雑な条件やアクションを記述できるので、工夫してみてほしい。例えば、送信者アドレスによってメールの色を分類して、どこの社のだれの発言かを分かりやすくする例を考えてみよう。自組織(自社)ドメインが送信元になっているメールを青色にし、さらにその中でも特に自分が出したメールは赤色にしてみる。この場合のルールとしては、まず先頭に「送信者アドレスが“@example.co.jp”ならメールを青にする」というルールを定義し、2番目には「送信者アドレスが“myaddress@example.co.jp”ならメールを赤色にする」というルールを定義する。いずれのルールでも、フォルダ移動などはなく、単にメールの件名の色が変わるだけである。これにより、後続のフォルダ分けルールに影響を与えることなくメールの色を変更できる。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。