IMAP 仕様に対する IMAP IDLE 拡張 (RFC 2177 で定義) では、新しいメッセージが到着したときやその他の更新がユーザーのメールボックスで発生したときに、IMAP サーバーが電子メールクライアントに通知する機能が追加されています。IMAP IDLE 機能には次の利点があります。
メールクライアントが、受信メッセージについて IMAP サーバーにポーリングする必要がありません。
クライアントポーリングの排除により、IMAP サーバーにかかる負荷が減少し、サーバーのパフォーマンスが向上します。クライアントポーリングは、ユーザーがほとんどまたはまったくメッセージを受信しないときにもっともリソースを浪費します。クライアントは設定された間隔で (通常、5 分または 10 分おきに) ポーリングを続けます。
メールクライアントは、メッセージがユーザーのメールボックスに到着する実際の時間にずっと近いタイミングで、ユーザーに新しいメッセージを表示します。メッセージステータスの変化も、ほぼリアルタイムで表示されます。
IMAP サーバーは、新規または更新されたメールメッセージをクライアントに通知する前に、次の IMAP ポーリングを待機する必要はありません。その代わりに、IMAP サーバーは新しいメッセージが到着した、またはメッセージのステータスが変化した時点でただちに通知を受信します。サーバーはその後、IMAP プロトコル経由でクライアントに通知します。
IMAP IDLE 機能では、イベント通知サービス (ENS) を使用して通知を伝達します。IMAP IDLE を使用するには、次の ENS コンポーネントを設定してください。
少なくとも 1 つのホスト上の enpd サーバー
すべてのメッセージストアホスト上の Ibiff 通知プラグイン
Messaging Server 用の ENS の設定については、『Sun Java System Communications Services Event Notification Service Guide』を参照してください。
Ibiff 通知プラグインの設定については、「B.1 Messaging Server に ENS Publisher をロードする」を参照してください。
メッセージストアを実行しているホストからの接続のみを受け付けるように enpd サーバーを設定します。
メッセージストアホストへの接続を制限するには、ENS_ACCESS 環境変数を設定します。この環境変数は、enpd へのアクセスを許可するアクセス権のリストを設定します。構文は次のとおりです。
setenv ENS_ACCESS 'allowdeny ipaddress|mask; allowdeny ipaddress|mask; ...' |
次に、各引数について説明します。
+ (許可を指定する場合) または — (拒否を指定する場合) のどちらかです。
ドット区切り 10 進数の IP アドレスを指定します。
ドット区切り 10 進数の IP アドレスマスクを指定します。
例:
次の例では、ローカルホストへのアクセスのみを許可しています。
setenv ENS_ACCESS '+127.0.0.1|255.255.255.255' |
次の例では、ローカルホストと、192.168.0.17 を除くすべての IP アドレス 192.168.0.* へのアクセスを許可しています。
setenv ENS_ACCESS '+192.168.0.1|255.255.255.0;+127.0.0.1|255.255.255.255; \ -192.168.0.17;255.255.255.255' |
mailsrv として configutil ユーティリティーを実行して、ENS サーバーが動作しているホストの名前を指定します。
cd msg-svr-base ./configutil -o local.store.notifyplugin.ensHost -v "ipaddress" |
ここで、ipaddress は、ENS ホストマシンのドット区切り 10 進数の IP アドレスを指定します。
例:
cd msg-svr-base ./configutil -o local.store.notifyplugin.ensHost -v "127.0.0.1" |
通知に使用するイベントキーを指定します。
ENS イベントキー (ensEventKey) がデフォルト値に設定されていると、IMAP IDLE は動作しません。
ensEventKey 値を %M で終わるように設定してください。文字列 %M は、イベントが発生したメールボックスの名前に置き換えられる置換コードです。
次のように configutil コマンドを実行します。
./configutil -o local.store.notifyplugin.ensEventKey -v "eventkey" |
ここで、eventkey は ENS で使用される一意の識別子です。そのデフォルト値は enp://127.0.0.1/store です。イベントキーのホスト名の部分は、ENS が実行されているホストの判定には使用されず、単に識別子の一部でしかありません。
例:
./configutil -o local.store.notifyplugin.ensEventKey -v "enp://127.0.0.1/store/%M" |
Messaging Server 用の ENS パブリッシャーを有効にする libibiff 通知プラグインファイルを読み込みます。
次のように configutil コマンドを実行します。
./configutil -o local.store.notifyplugin -v "msg-svr-base/lib/libibiff" |
受信箱だけでなく、すべてのユーザーメールボックスから通知が送信されるようにします。
デフォルトでは、受信箱内で発生したイベントによってのみ通知が生成されます。ただし、IMAP IDLE RFC (2177) では、どのメールボックスでイベントが発生した場合でも常に、IDLE はクライアントに通知する必要があると規定されています。
この RFC に準拠するために、IMAP IDLE 機能を使用するには、すべてのメールボックスの通知を有効にする必要があります。そうでない場合、IMAP サーバーは IDLE 機能を通知しません。
すべてのメールボックスの通知を設定するには、configutil コマンドの noneinbox を 1 の値に設定します。
./configutil -o local.store.notifyplugin.noneinbox.enable -v 1 |
ここで、-v 1 は、すべてのメールボックスからの通知を有効にします。
root として Messaging Server をいったん停止してから再起動します。
cd msg-svr-base/sbin ./stop-msg ./start-msg |
IMAP サービスに IDLE 機能が含まれたことを確認します。telnet を使用して IMAP のホストとポートに接続します。
telnet IMAP_hostname port |
例:
telnet myhost imap trying 192.18.01.44 ... connected to myhost.siroe.com * OK [CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ NAMESPACE UIDPLUS CHILDREN BINARY UNSELECT SORT LANGUAGE STARTTLS IDLE XSENDER X-NETSCAPE XSERVERINFO X-SUN-SORT X-SUN-IMAP X-ANNOTATEMORE AUTH=PLAIN] myhost.siroe.com IMAP4 service (Sun Java(tm) System Messaging Server 6.3-0.05 (built Feb 7 2006)) |