IMAPのメールや添付ファイルをオフラインで利用できるOfflineIMAP

 OfflineIMAPは、インターネットに接続していなくてもIMAPのメールを読めるようにするツールだ。たとえば、外出先でメールの添付ファイルがどうしても必要になったが、インターネットにつながる場所が見つからない、といった事態を防ぐのに役立つ。

 夜寝ている間にOfflineIMAPですべてのメールをローカルに同期しておけば、朝起きたときには直ちに利用できる。ただしこれはセキュリティとのトレードオフだ。メールをさっと利用できる利便性と引き換えに、ローカルのノートパソコンに保存したメールのコピーすべてを適切に保護翻訳記事)する必要が生じる。

 OfflineIMAPは、リモートのIMAPサーバに接続し、メールのコピーをmaildir形式でローカルに保存する。このmaildirツリーを手持ちのメール・クライアント・ソフトで参照することで、リモート接続の場合と同様にメールを利用できるというしくみだ。既読にしたメールや削除したメールなど、ローカルで加えた変更を同期してサーバに反映することもできる。同期は両方向なので、サーバにある新着メールをローカルのmaildirにダウンロードする処理もあわせて行われる。

 メール・クライアントがmaildir形式をサポートしていない場合は、OfflineIMAPを使って2つのIMAPサーバ間でメールを同期するという方法で、同様の処理を実現できる。こちらは少々複雑だ。ノートパソコン上にIMAPサーバをインストールし、そのIMAPサーバに接続するようにメール・クライアントを設定したうえで、OfflineIMAPを使ってリモートのIMAPサーバとローカルのIMAPサーバを同期させる必要があるからだ。別の方法としては、OfflineIMAPでの保存は通常どおりmaildir形式で行い、ローカルのIMAPサーバでそのmaildirデータを参照元として利用するというやり方もある。その方法でメールを処理できるようにローカルのcourier-imapを設定する方法については、このスレッドに説明がある。

 OfflineIMAPには、openSUSE用、Ubuntu Gutsy用、Fedora 7および8用のパッケージがあり、それぞれのリポジトリに登録されている。パッケージがないディストリビューションの場合は、ドキュメントの説明に従ってソースからインストールすることも可能だ。今回は、Fedora 8リポジトリのOfflineIMAP 5.99.2を試用してみた。このバージョンはGmailのアカウント・タイプをサポートしていない。Fedora Rawhideリポジトリのバージョン5.99.7はGmailをサポートしているが、こちらはディレクトリ作成に関して別のバグがあり、同期がうまくいかない。したがって、後続のバージョンのパッケージがリポジトリに登録されるまでは、IMAPのアカウント・タイプを利用し、手動設定でGmailに対応させることをお勧めする。

 OfflineIMAPのメインの設定ファイルは$HOME/.offlineimaprcだ。このファイルのコメント付きのテンプレートはこちらのページで参照できる。設定ファイルでは、1つまたは複数のアカウントを指定し、各アカウントのローカル・リポジトリとリモート・リポジトリの設定を記述する。リポジトリの設定はそれぞれ別個のセクションで行い、ローカルへのメール保存か、IMAPによるメール・サーバへの接続かを指定する。IMAPサーバに接続する場合は、ホスト名、ユーザ名、パスワード、SSL接続の使用の有無も指定する。

 設定とセットアップの例を次に示す。ここではまず、OfflineIMAPのパッケージに付属するサンプルをコピーして設定ファイルを作成した。その中のaccountsディレクティブでは、単一のGmailアカウントを使用するように設定した。さらに、このアカウントに対し、ローカルとリモートの両方のリポジトリを指定した。この2つのリポジトリを使って、ローカルのメールの保存場所とリモートのサーバの場所を指定する。ローカルのリポジトリは、homeディレクトリのmaildirとした。リモート・リポジトリの設定では、typeにGmailではなくIMAPと指定した。前述のバージョンの問題に伴うものだ。remoteuserでは、スパムボットに自己紹介させるようなメールアドレスを指定してみた。nametransディレクティブでは、ローカル・リポジトリのフォルダ名を変更できる。今回の例では、re.subを2回使っている。まず、INBOX、[Gmail]、[Google Mail]をrootに変更したうえで、それ以外の1つのディレクトリへの対応として、Sentフォルダをrootフォルダ内に移動している。この変換はEvolutionで有効だ。Evolutionでは、INBOXがIMAPアカウントのルート・フォルダの直下にあるものと想定しているからだ。INBOXのローカル・コピーの場所を変更しておけば、Evolutionからローカルのメール・リポジトリへのアクセスをスムーズに行える。nametransディレクティブによるフォルダ名の変換では、必要に応じてもっと込み入った処理を行うことも可能だ。

$ cp /.../offlineimap.conf ~/.offlineimaprc
$ vi ~/.offlineimaprc

accounts = my-gmail

[Account my-gmail]
localrepository = GMailLocalMaildirRepository
remoterepository = GMailServerRepository

[Repository GMailLocalMaildirRepository]
type = Maildir
localfolders = ~/.offlineimap-maildir-my-gmail
sep = .
restoreatime = no

[Repository GMailServerRepository]
type = IMAP
remoteuser = i-am-a-spam-bot-log-me@gmail.com
remotehost = imap.gmail.com
ssl = yes
remotepassfile = ~/.offlineimap-pass-my-gmail
realdelete = no
nametrans = lambda foldername: re.sub('^Sent$', 'root/Sent', re.sub('^(\[G.*ail\]|INBOX)', 'root', foldername))

...

$ mkdir -p ~/.offlineimap-maildir-my-gmail

 以上の設定を行ったら、「offlineimap」を実行すればよい。まずメタデータがチェックされ、同期をまだ行っていないことが検出される。そして、IMAPサーバから全データがダウンロードされる。

 これで、メール・データの完全なコピーがローカル・マシン上にmaildir形式で保存される。このデータを直接利用するようにメール・クライアントを設定する方法については、こちらの説明を参考にしてほしい。ローカルで加えた変更をリモートのIMAPサーバに反映し、新着メールの確認をあわせて行うときには、「offlineimap」を再度実行するだけでよい。また、~/.offlineimaprcファイルでautorefreshディレクティブを設定しておけば、指定した分数おきにアカウントを自動で同期できる。

 通常は、OfflineIMAPはコマンドライン・オプションを何も付けずに実行すればよい。その場合、設定ファイルで指定したすべてのメール・アカウントの同期が双方向で行われる。また、いくつかのオプションを利用して、動作に変更を加えることも可能だ。-aオプションでは、同期する対象のアカウントをコンマ区切りで指定できる。設定した複数のアカウントの中で同期に時間がかかるものがある場合に、特定のアカウントに来たメールだけを同期することが可能だ。-uオプションでは、OfflineIMAPで使用するユーザ・インタフェースを複数の候補の中から指定できる。デフォルトのインタフェースはCurses.Blinkenlightsだが、人によっては表示を煩わしく感じるかもしれない。TTY.TTYUIの方が進行状況の表示がシンプルで、煩わしさが少ない。また、~/.offlineimaprcファイルのuiディレクティブを使って、デフォルトで使用するユーザ・インタフェースを変更することも可能だ。-cオプションでは、~/.offlineimaprc以外の設定ファイルの場所を指定できる。

 IMAPアカウントのデータをオフラインで利用できれば、添付ファイル1つを取得したいがためにインターネットに接続できる場所を探し回ったり、メール・クライアントのローカルのキャッシュにメールが残っていないかどうかを調べたりといった必要がなくなる。添付ファイルのサイズがよほど巨大でない限りは、起床の1時間前にメール・データをノートパソコンにダウンロードするようにスケジュールを設定しておくことで、外出先での貴重な時間を有意義に生かせると思う。

Ben Martinは10年越しでファイルシステムと取り組んできた。博士課程終了。現在、libferris、ファイルシステム、サーチソリューションを中心にコンサルタント業務を展開している。

Linux.com 原文(2008年5月6日)