DovecotでIMAP IDLE を使った Pushメールを体験してみる
以前に Dovecotでメールを受信する でDovecotの基本設定について解説しました。
今回は、そのDovecotを使って、携帯メールのようなメール通知を行う Pushメール を体験してみます。
Dovecotは、IMAP IDLE コマンドに対応していて、
クライアントから IMAP IDLE コマンドを送信すると、サーバーは、クライアントが Idling することを許可します。
ただし、TCP接続はそのまま接続した状態を保つのがポイントで、
クライアントがIdling 中であっても、サーバー間との接続は保たれていますので、メール受信した場合に
Idling 中のクライアントへ EXISTS 応答メッセージ を送信することで クライアントへメール受信の通知を行い、いわゆるPushメール機能を実現する・・・というものです。
では、早速、簡単に解説してみます。
Dovecot での IMAP IDLE コマンドとPushメールの処理の流れ
Dovecot での IMAP IDLE コマンドとPushメールの処理の流れについて、簡単に解説しておきます。
以下は、IMAP4 IDLEコマンドを利用した Pushメールの大きな流れです。この図をもとに解説します。
- IMAP4接続要求 します。
- CAPABILITY コマンドを送信します。
このコマンドで、Dovecotサーバーが、IDLEコマンドに対応しているか確認します。
この応答メッセージに、対応しているコマンドについて情報が送信されます。(ここでは省略しています。)
- AUTHENTICATE コマンドを送信します。
このコマンドで、Dovecotサーバーへのログイン要求します。
認証OKの場合はログイン許可します。(ここでも細かいやり取りがありますが、詳細は省略しています。)
- SELECT INBOX コマンドを送信します。
このコマンドで、Dovecotサーバーへのログインしたユーザのメールボックスを選択します。
ここで、該ユーザのメールボックスにメールがあれば、EXISTS応答メッセージを送信し、メールがあることを通知します。
(そのあと、メールの受信制御がありますが、詳細は省略しています。)
- IDLE コマンドを送信します。
このコマンドで、クライアント側がIDLE状態となることを宣言します。
Dovecotサーバー側は、これを受信すると、クライアントがIDLE状態と認識し、該ユーザへのメールが受信するまで、Aliveメッセージ以外は送信しなくなります。
また、ここで大事なのは、TCPの接続状態をそのまま保持する点です。接続のままなので、後でメールを受信した際に、クライアント側へ通知することができます。
Aliveメッセージ は、TCPの接続が保持されているか、クライアントがまだ生きているか確認するためのメッセージを一定間隔で、Dovecotサーバーからクライアントへ送信します。
これが、Dovecotでは、“OK Still here” メッセージと言われていて、
Dovecotの設定ファイル(dovecot.conf)の中で その送信間隔を imap_idle_notify_interval (デフォルト 120秒)で指定することができます。
- EXISTS 応答メッセージを送信します。
このメッセージで、クライアントへメールを受信したことを通知します。
クライアント側は、この通知で通常状態へ復帰し、メール受信処理を行います。
DovecotでIMAP IDLE を使ってPushメールを体験してみる
Dovecot でimap4 に対応する
少なくとも Dovecot でimap4 に対応している必要があります。
Dovecotの設定ファイルで、protocolsパラメータを確認してください。
Dovecotの設定ファイルは、各ディストリビューションでファイルパスが異なります。
CentOS5 では、/etc/dovecot.confを
CentOS6,ScientificLinux6,Debian6,Ubuntu10,12 では、/etc/dovecot/dovecot.conf
を、それぞれ編集します。
...
# 少なくとも imap imaps のいずれかが設定されている必要があります。
# ここでは最小限の設定としています。
protocols = imap
...
|
Debian6,
Ubuntu10,12 では、対応プロトコル(imap , pop3)でパッケージが異なります。
dovecot-imapdがインストールされていない場合は、インストールしましょう。
$ aptitude install dovecot-imapd
...
|
編集を終えたら、Dovecotを再起動しておきます。
$ /etc/init.d/dovecot restart
...
|
Thunderbird でPushメールを体験してみる
メールクライアントでPushメールを体験するには、
メールクライアント自体がIMAP IDLE に対応していなければなりません。
メジャーなところは、概ね対応していると思いますが、ここでは、フリーメールクライアントとしてメジャーなThunderbird を使ってみます。
実は、Thunderbirdはimap4 を選択するだけで、あとは何も設定することなく、Pushメールを体験できます。
一応、簡単に解説しておきます。ほとんどアカウントの設定だけです。
- メニューの[ ツール ] – [ アカウント設定 ]でアカウント設定画面を開きます。
- アカウント設定画面の左下部、[ アカウント操作 ] – [ メールアカウントを追加 ]でメールアカウント設定画面を開きます。
- メールアカウント設定画面で、名前、メールアドレス、パスワードを入力し、[続ける]をクリックします。
- メールアカウントが正しく認識できた場合は、画面下の[完了]をクリックします。
ただし、必ず、ここで受信サーバのプロトコルがIMAPとなっていることを確認した上で、[完了]をクリックします。
また、正しく認識できなかった場合は、サーバー情報などを確認の上、[再テスト]をクリックします。
[完了]をクリックすると、TLSによる暗号化を行っていない場合は、以下のような警告画面が表示されます。
ここでは、テスト用でもあるので先に進みます。
接続する上での危険性を理解しました。にチェックし、[完了]をクリックしてアカウントの登録を完了します。
(本番では、しっかりセキュリティ強化を図ってください。)
- メールを送信して確認してみます。
サーバーからメールコマンドで単純に以下のようにメールを送信してみます。
$ mail hoge@exmaple.com
Subject: TEST IMAP IDLE
TEST IMAP IDLE
.
EOT
|
メール送信から間を置くことなく、Thunderbirdが新着メールを知らせてくれたことと思います。
いかがだったでしょうか?
Dovecotの設定は簡単?というよりIMAPさえ使えるようになっていれば、デフォルトのままでほぼOKのはずです。
あえてDovecotの設定を変更するとしたら、先にも書いたように imap_idle_notify_interval (デフォルト120秒)の設定を変更するぐらいでしょう。
この設定を長くすれば、それだけ無駄にパケットの送受信をしないで済みますが、これが長すぎるとTCPの接続は、自動的に切断されることがあります。
それは、ルーターであったり、モバイルであれば、その他の中継機器だったり、無駄にリソース(回線)が使用されていると判断されてしまうことがあります。
TCPの回線が接続されているから、Pushメールが実現できるのであって、これが切れてしまうと通知できませんからね。
設定を変更しても長すぎると機能しない可能性有りなので、十分注意しましょう。
また、これは、モバイル端末(タブレット、スマートフォン)でもIMAP IDELに対応したアプリを使用すれば、同じようにPushメールが実現できます。
モバイルのときは、先のimap_idle_notify_interval の設定に 特に気を付けましょう。
バッテリーの寿命を短くしたり、異常にパケット代が増えたりするかもしれません。 十分な注意が必要でしょう。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
関連記事 :
コメントを投稿 :