Posts tagged: IMAP IDLE)

メールのプッシュに対応した Google Apps / Gmail でリアルタイムにメールを受け取る方法 (IMAP IDLE)

gmail

今まで知らなかった自分も無知なのですが、意外と皆さんに知られていない Gmail とその独自ドメイン板の Google Apps の便利な機能を紹介します。

この機能を使えば、今まで 5 分間隔などで受信していた PC メールが、i モードのメールのように、リアルタイムでメールを受信することが可能になります。

自分も昔そうでしたが、メールといえば POP3 や APOP で受信しているよ、という方が結構多いと思います。ですが、Gmail などの Google サービスの恩恵を受けるのであれば、昔からのプロトコル、IMAP を使用されることをぜひともここで皆さんにお勧めします。

IMAP って何だ?

IMAP はメールの未読、既読の状態だけではなく、メールボックスのフォルダの情報などをサーバー側でストアできるため、複数の環境から接続するような状況下では非常に便利なプロトコルです。

ですが日本ではインターネット黎明期にプロバイダのメールボックスの容量が少なかったことや、ユーザーへのメールサポートが困難になるなどの理由から主に POP のみがサポートされてきました。

一方、メールボックスの容量に比較的余裕のあった海外や日本の大学などで IMAP を使っていたよ、という方は多いと思います。

IMAP IDLE でできること

こうした IMAP ですが、1 つの画期的な機能が RFC で 1997 年に定義されます。それが IMAP IDLE (RFC 2177)
この機能はクライアント(メールソフト)が POP のように定期的にサーバーにメールの新着を問い合わせるのではなく、サーバー側でメールが届いた際に、クライアントに能動的に「メール来たよっ」とお知らせしてくれるものです。

つまり、i モードのメールのように、リアルタイムでメールの受信が可能になります。
(注) この仕様により厳密にはプッシュと呼べないのですが、まぁプッシュです (どっちだよ) :oops:

これってすごくないですか?
企業であれば Microsoft Exchange を使用して、Outlook でメールのやりとりをしているところも多い思いますが、それと同じ感覚で、リアルタイムにメールの受信を知らせてくれるのです。

これは Google Apps を企業で導入しているところにとってみれば、情報をリアルタイムにキャッチするという意味において、非常に大きなメリットだと思います。

そんな Google Apps と Gmail ですが、Web メールだけではなく、IMAP に正式に対応したのは、10/24/2007 でリリースが出ていました。

自分自身もっと早くこの IMAP IDLE を知っていれば、もっと便利なメール生活が送れていたと思うと、非常に残念です。

IMAP IDLE を使うのに必要なものは?

この IMAP IDLE、夢のような規格ですが、この恩恵を受けるためには、サーバーとクライアント、両方が対応していないとだめなんですね。

これは IMAP IDLE のしくみがそうさせているもので、定期的にサーバーにログインとログアウトを繰り返す既存の仕組みに対し、IMAP IDLE は、常にサーバーとセッションを張った状態になっており、メールが来たらサーバーからクライアントに対して、受信の通知が能動的に行われます。

また、メールが何も来ていない状態でも、接続のセッションを保つために、定期的にサーバーとクライアントで keepalive(NOOP) の応答が行われます。

パケットをキャプチャしてみましたが、1 時間あたり数キロバイトのデータのやりとりをクライアントとサーバーで行っているようです。

IMAP IDLE をサポートしているサーバーとクライアントはどれ?

簡単に調べてみると、メジャーなクライアントは結構サポートしているようです。

  • Opera Mail
  • Mozilla Thunderbird
  • Apple Mail( バージョン 3 以降 )
  • Microsoft Outlook Express
  • Microsoft Windows Mail
  • Microsoft Outlook

これらはすべて、IMAP IDLE をサポートしています。

逆に、日本で有名な (私もライセンス持ってます) Becky! はいまいち不明でしたが、検索してみるとサポートされているという書き込みが見あたりませんでした。( 間違ってたらごめんなさい。)

またサーバーですが、日本では ISP が IMAP をサポートしているところがまりないようですので、このブログのタイトルと同じように、今回は Gmail と Google Apps のみ、とさせてください。

実際の IMAP IDLE の動きを把握しよう

実際に IMAP IDLE の動きが私も知りたかったので、ラボにある Free BSD から Open SSL で Gmail サーバー (Gmail も Google Apps も使用する IMAP サーバーは同じ ) にログインしてみました。

打ったコマンド

  1. openssl s_client -crlf -quiet -connect imap.gmail.com:993
  2. . capability
  3. . login hogehoge@yourdomain.com hogehoge_pw
  4. . examine inbox
  5. . idle

コンソール画面

  1. %openssl s_client -crlf -quiet -connect imap.gmail.com:993
  2. depth=1 /C=US/O=Google Inc/CN=Google Internet Authority
  3. verify error:num=20:unable to get local issuer certificate
  4. verify return:0
  5. * OK Gimap ready for requests from 202.181.97.64 37if2879981pxi.95
  6. . capability
  7. * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA XLIST
  8. CHILDREN XYZZY
  9. . OK Thats all she wrote! 37if2879981pxi.95
  10. . login hogehoge@yourdomain.com hogehoge_pw
  11. * CAPABILITY IMAP4rev1 UNSELECT LITERAL+ IDLE NAMESPACE
  12. QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS
  13. COMPRESS=DEFLATE
  14. . OK hogehoge@yourdomain.com authenticated (Success)
  15. . examine inbox
  16. * FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
  17. * OK [PERMANENTFLAGS ()]
  18. * OK [UIDVALIDITY 2]
  19. * 16 EXISTS
  20. * 0 RECENT
  21. * OK [UIDNEXT 11951]
  22. . OK [READ-ONLY] inbox selected. (Success)
  23. . idle
  24. + idling

実際には、. capability コマンドで出てくる対応している機能一覧に、IDLE が含まれているのがわかります。また、

. idle

コマンドで、着信通知機能を ON に出来ます (アイドル状態に移行できます )。

メールの着信通知の仕組みを理解する

メールボックスに 16 通のメールがあることが上の画面からわかりますが、試しにメールを送ってみると以下のメッセージがサーバーからはき出されました。

* 17 EXISTS

これは 17 通目のメールが届きましたよ、ということです。IMAP IDLE に対応したクライアントとであれば、この通知をトリガーにして新着通知を行ったりといった動作が可能になります。

総括 今こそ使う IMAP

今回は主に PC の世界の視点で、IMAP IDLE を解説しましたが、モバイルの世界では、メールに対する考え方が大きく変わると思います。また、これだけの機能ですから、デスクトップ PC で使用しても、恩恵を最大限に得られるはずです。

メールというインフラが整った今だからこそ、IMAP を使用すべきだと考えます。

参考書籍

WordPress Themes