12月

今週から会社のメールがGoogle Apps for Your Domainに移行しました。今までのメールサーバはPOP3しか使えなかったのですが、Gmailに移行したのを機にIMAP4を使ってみることにしました。
私は主にLeopardのMail.appを利用してメールを読んでいるので、Googleの公式のヘルプにある通りの手順で簡単に設定することができます。

ただ、このままだとGmailが「迷惑メール」と判断したメールがMail.appでは未読メールとして表示されたり、Mail.appでメールを削除した際にGmailのゴミ箱に移動されずに「Deleted Messages」ラベルが付けられる、などの問題が発生します。そこで、Gmail側の「迷惑メール」フォルダなどにMail.appで「メールボックスの用途」を設定しました。これでメール管理をMail.app側に統合化する事ができ、便利に使えるようになりました。

POP3でメールを読んでいた頃はPOPFileを利用して、迷惑メールのフィルタやメールの振り分けを行っていました。Gmailには迷惑メールのフィルタ機能が元から備わっていますが、メールの振り分けをPOPFileほどは柔軟に設定できません。たとえば、会社のメールアドレスには誰かが全員用のエイリアス用に購読したNikkei BPやキーマンズネットのニュースがたくさん送られてくるのですが、単純なルールでこれらをまとめて「ニュース」フォルダに振り分けるのは(ほぼ)不可能です。

そこで、POPFileをIMAP4の環境で使用する方法について調べてみました。

POPFileのIMAPモジュールはPOPモジュールと異なりプロキシではありません。そのため、POPFileを利用するのにメールクライアントの設定を変更する必要はありません。これは良いことですが欠点もあります。プロキシとして動作しない為に、サブジェクトを変更したりX-Text-Classificationヘッダを付加する事ができません。

IMAPモジュールはメールクライアントの動作とは無関係に定期的にIMAPサーバに接続し、メールの本文の内容を判断して適切なフォルダ(Gmailの場合はラベル)に振り分けます。IMAPモジュールはいったん設定を行うと後は自動的に処理を続けるロボットのようなプログラムなので、クライアントPCで動作させるよりは常時稼働しているサーバの上で動かした方が良いのかもしれません。

IMAPモジュールの使い方は公式サイトの説明にある通りですが、Leopard(Mac OS X)で使用するには注意する点がいくつかあります。(POPFile v1.1.0 を使用しています。)

imap.gmail.com

POPFile コントロールセンターの「設定」ページの「IMAPサーバー ホスト名」にGmailのIMAPサーバ名、imap.gmail.com を入力しても接続できずに、以下のエラーがログに残ります。

2008/12/25 23:48:08 10142: IMAP-Client: 136: IO::Socket::SSL error: IO::Socket::SSL: bind: Address family not supported by protocol family
2008/12/25 23:48:08 10142: imap: 1624: Could not CONNECT to server.
2008/12/25 23:48:08 10142: imap: 1493: Could not connect to server.

エラーメッセージをGoogleで検索すると、IPv6が関係しているエラーのようです。Leopard に固有の問題のようですが、「imap.google.com の AAAA レコードが見つかる為に IO::Socket::SSL がサポートしていない IPv6 で接続しようとしている」ためにエラーになっているらしい。将来のバージョンで修正されると思いますが、それまでのワークアラウンドを考えます。

要は、imap.gmail.com の AAAA レコードが見つかることが原因なので、たとえば、imap.gmail.com の(IPv4の)IPアドレスを調べて、それをIMAPサーバーのホスト名に設定したり、そのIPアドレスを逆引きして得られる実サーバのホスト名を設定すれば、とりあえず使用できるようになります。(今、私の環境から調べるとrv-in-f111.google.comです。)ただ、imap.gmail.comを構成する多数のサーバの中の1台にしか接続できなくなるため、そのうち接続出来なくなるかもしれません。

日本語のIMAPフォルダ名

IMAPモジュールではPOPFileのバケツ毎に振り分けるIMAPのフォルダを設定する必要があります。この設定はPOPFile コントロールセンターの「設定」ページから行いますが、このページは日本語の IMAPフォルダ名に対応していません。たとえば、「迷惑メール」フォルダは「&j,dg0TDhMPww6w-」と表示されます。これは modified UTF-7 というエンコーディングだそうですが、このままでは振り分けるべきフォルダがどれなのかが分かりません。

これも将来のバージョンで修正されると思いますが、当面は以下のような方法で調べるしかないようです。

$ irb -rnet/imap
irb(main):001:0> %w(迷惑メール 下書き 送信済みメール ゴミ箱).each {|key| puts "#{key} -> [Gmail]/#{Net::IMAP.encode_utf7(key)}"}
迷惑メール -> [Gmail]/&j,dg0TDhMPww6w-
下書き   -> [Gmail]/&Tgtm+DBN-
送信済みメール -> [Gmail]/&kAFP4W4IMH8w4TD8MOs-
ゴミ箱   -> [Gmail]/&MLQw33ux-

関連するエントリ

関連書籍

Post Comment