mobileimap とは?
mobileimap は携帯電話用の IMAP対応 Webメーラーです。au や i-mode などの携帯電話から IMAP サーバ上のメールを読むことが できます。CGIではなく、HTTP対応のサーバとして動作します。
新着情報
- 2005-05-22: mobileimap 2.7 を公開
- Ruby 1.9 で動くようにしました。
- --signature オプションでシグネチャファイルを指定できるようにしました。
(Masanori Hanawa 氏によるパッチ)
- 2003-04-08: mobileimap 0.1 を公開
- 最初のバージョンを公開しました。
スクリーンショット
au の A3014S でのスクリーンショットです。 (この画面はやや古くなっています。最新版にはメールの検索とフォ ルダ名の検索のためのフォームが追加されています)
必要なもの
- Ruby 1.8以上
- gzip圧縮に対応するために必要なもの (なくても動きます)
- Ruby/Zlib 0.6以上
- https に対応するために必要なもの (なくても動かします)
- OpenSSL for Ruby 0.2.0pre0以上
- 日本語のフォルダ名を表示をするために必要なもの (なくても動かします)
- Ruby 1.8 に付属の iconv モジュール
- Net::IMAP::decode_utf7 メソッドを備えた Net::IMAP ライブラリ (Ruby 1.8.0 2003-05-09以降に付属)
動作を確認した機種
WAP 2.0 (XHTML Basic対応) 対応の携帯電話なら大丈夫だと思います。
- au
- A5304T, A5303H, A3014S, A3012CA, A5303H, A1301S
- i-mode
- P504i, P211i, SO505i, SH505i
- FOMA
- P2102V
- Air H" PHONE
- AH-J3002V
- feelH"
- SANYO J90
- J-PHONE
- J-SH52, J-SH53
- J-PHONEは80番または443番のポートで動いている Webサーバ 以外は接続できないようです。mobileimap を80番で動かすか、 Apache の mod_proxy を利用して、
ProxyPass /mobileimap http://localhost:12345
のように、localhostの12345番で動かしているmobileimapを80番 で動いている Apache の /mobileimap として見せるような設定 をすれば大丈夫です。
このとき、ProxyRequests On
という余計な設定も一緒に書いてしまうと、オープンプロキシになってしまう可能性があるため、危険です。
動作を確認した IMAPサーバ
- Courier-IMAP
最近の Courier-IMAP であれば configure 時に --enable-unicode=iso-2022-jp を 指定して make すると日本語の検索が行えるようになります。 参考サイト - Cyrus IMAP Server
標準で日本語の検索に対応しているようです。 - uw-imapd
標準で日本語の検索に対応しているようです。 - Binc IMAP
2004年1月現在、まだ日本語の検索に対応していないようです。
使い方
基本編
mobileimap は HTTP を喋るサーバとして動作します。 IMAPサーバが動いているホストで mobileimap を起動するには、コマンドラインから次のように実行します。
% mobileimap ユーザ名@localhost:143[CRAM-MD5]: IMAP Password: http://example.jp:8143/
IMAPのパスワードを入力すると、URLが表示されます。表示された URL に Mozilla や Internet Explorer などのブラウザからアクセ スしてうまくメールが読めることを確認したら、携帯電話からアク セスしてみてください。mobileimap は Ctrl + C を押すと終了します。
mobileimap はデフォルトで次のようなパラメータを使用します。 各パラメータはコマンドラインオプションで指定できます。
- IMAPの認証方法 (-a, --imap-auth)
- CRAM-MD5
- CRAM-MD5 の他は LOGIN と PLAIN を選べます。
- IMAPのユーザ名 (-u, --imap-user)
- 環境変数USER
- IMAPのホスト名 (-S, --imap-host)
- localhost
- IMAPのポート番号 (-P, --imap-host)
- 143
- HTTPのホスト名 (-s, --http-host)
- Socket.gethostname
- HTTPのポート番号 (-p, --http-port)
- 8143
- SMTPのホスト名 (--smtp-host)
- localhost
- SMTPのポート番号 (--smtp-port)
- 25
- メール送信時の From: (-f, --from)
- 環境変数USER @ Socket.gethostname
- --from="Taro Yamada <taro@example.jp>" のように指定できます
サーバとして常駐させる方法
起動時に -d オプションを指定するとサーバとして常駐します。 このとき ~/.mobileimap.log にログが書き出され、 ~/.mobileimap.pid にプロセスID が書き出されます。
バックグラウンドで動いているサーバを停止するには次のように実 行します。mobileimap のサーバが停止し、 ~/.mobileimap.pid が 削除されます。
% mobileimap --stop
複数の mobileimap をサーバとして立ち上げている場合は、 ~/.mobileimap.pid にプロセスIDが記録されているすべての サーバが停止します。個別に停止したいときは
% mobileimap --list 7754 http://example.jp:8143/ 7761 http://example.jp:8144/foo
のように実行して、現在動いているサーバのリストを調べて、
% mobileimap --stop='http://example.jp:8143/'
のように停止させたいサーバがサービスしている URL を指定します。 次のように複数のURLを指定してまとめて停止させることもできます。
% mobileimap --stop='http://example.jp:8143/ http://example.jp:8144/foo'
安心感を高める方法
その1: URLのパスを指定する
上で紹介した起動方法では、mobileimap のURLに誰でもアクセス できてしまいます。そこで、起動時に
% mobileimap -x foobar
と URL のパスを指定すると http://example.jp:8143/foobar とい う URL でしかアクセスできなくすることができます。foobar の部 分を秘密にしておけば、そこそこ安心できるでしょう。 mobileimap は http:// へのリンクを張らないので、リファラーのロ グから mobileimap の URLが見つかってしまう危険性は少ないと言えます。
その2: サブスクライバIDを指定する
au の端末でWebにアクセスすると、サブスクライバID という、端 末ごとに異なるID が HTTPのへッダに付加されます。そこで、
% mobileimap -i xxxxxxxxxxxxxx_xx.ezweb.ne.jp
のようにサブスクライバIDを指定すると、指定されたサブスクライ バID を含んだ HTTPの接続のみを受けつけるようになります。
自分の携帯電話のサブスクライバIDを調べるには、
% mobileimap -i foobar
のように、でたらめな文字列を -i オプションで指定して携帯電話 から mobileimap の URL にアクセスします。すると、「サブスク ライバID が間違っています: xxxxxxxxxxxxxx_xx.ezweb.ne.jp」の ように、自分のサブスクライバIDが表示されるので、これを記録し ます。
その3: vodafone のユーザIDでアクセス制限する
上の「サブスクライバIDを指定する」の方法の -i オプションを -j オプションに置き換えてください。
その4: ホスト名/IPアドレスでのアクセス制御
ホスト名/IPアドレスでのアクセス制御を行うには --allow-hosts オプションで、アクセスを許可するホスト名/IPアドレスを正規表 現で指定します。
たとえば、example.ne.jp 以外からのアクセスを受けつけないよう にするには、次のように指定します。
% mobileimap --allow-hosts='\.example\.ne\.jp$'
下の例のように、IPアドレスを指定することも可能です。
% mobileimap --allow-hosts='/^192\.168\.0\.1$/'
その5: https を喋る
OpenSSL for Ruby がインストールされている場合は https を喋ることがで きます。https を喋るにはコマンドラインから次のように実行します。
% mobileimap --ssl
ホスト名とポート名は --http-host, --http-port で指定したもの が使われます。SSLの鍵と証明書を指定するには --ssl-key, --ssl-cert オプションを使います。
その6: ベーシック認証を行う
Apache の ProxyPass を使って Apache 経由で mobileimap に アクセスするように設定すれば、 Apache 側でベーシック認証を 行えるはずです。
.mobileimaprc の設定方法
% mobileimap --dump-config > ~/.mobileimaprc
のように実行すると、~/.mobileimaprc の雛形が作成されるので、 これを編集してください。また、
% mobileimap -a login -u foo -x bar -d --dump-config > ~/.mobileimaprc
のように --dump-config とともに他のコマンドラインオプション も指定すると、それらの値を反映した ~/.mobileimap が作成されます。
~/.mobileimaprc は mobileimap の起動 時に自動的に読み込まれます。他の設定ファイルを読み込む場合は コマンドラインオプション --mobileimaprc=FILE で指定します。
フォルダ一覧で表示されるフォルダを指定する
フォルダ一覧で表示されるフォルダを指定するには、 --folder-include オプションと --folder-exclude オプションで 正規表現を指定します。両方指定したときは --folder-include が 先に適用され、その後で --folder-exclude が適用されます。
# foo|bar にマッチするフォルダのみを表示する % mobileimap --folder-include="foo|bar" # baz|quux にマッチするフォルダを除外する % mobileimap --folder-exclude="baz|quux"
その他コマンドラインオプションの使い方
- --subscribed-only
- フォルダ一覧のときに購読フォルダのみを表示する
- --folder-prefix=PREFIX
- フォルダ名のプリフィクスを指定する (uw-imapd など用)
- --fcc-folder=FOLDER
- Webから送信したファイルを保存するフォルダを指定する (Courier-IMAP なら INBOX.Sent など)
- --client-width
- クライアントの横幅の桁数を指定する (デフォルトは20)
コマンドラインオプションの一覧は mobileimap --help で表示できます。
gzip 圧縮
Ruby/Zlib をインストールしてから mobileimap サーバを立ち上げると、 gzip による圧縮が行えるようになります。
gzip 対応のブラウザからアクセスすると、コンテンツが gzip で 圧縮されてブラウザに送られます。このとき、ページのフッタ部分 に
-- mobileimap 2.7 (gzip)
のように、gzip で圧縮されているという印がつきます。gzip圧縮 を行うと、通信するデータの量が減るため、パケット料金の節約が 期待できます。とはいうものの、gzip 圧縮に対応したブラウザを 内蔵した携帯電話は存在しないようです (パケットが増えた方が儲 かるわけですから、そういうものでしょうね。もしあったら教えて ください)。
豆知識
デフォルトで「未読」のメールだけを読みたい
デフォルトで「未読」のメールだけを読みたい場合はメール一覧で 「未読」を選択した後でブックマークしてください。
既知の問題点
- メール一覧時に "unexpected token NIL" や "closed stream error" といった エラーが起きる場合は最新の Net::IMAP をお試しください。
(Ruby 1.8.1 までの Net::IMAP では起きる可能性があります) - https接続時は gzip 圧縮できない (なぜか出力が途中で切れるというバグが解決しないため)
ダウンロード
GNU General Public License version 2 (日本語訳)に従ったフリーソフトウェアとして公開します。完全に無保証です。
関連リンク集
- squirrelmail
本格的な IMAP対応 Webメーラ。 - mongle
超シンプルな IMAP対応 Webメーラ。 - mobileMH: AirH" Phone 用の MH 対応 Webメーラー
MH のメールを AirH" Phone から読むための Webメーラー。 - Ruby/eRubyによるCGIプログラミング
例題として IMAP対応のメールビューアを作っている。 - Active! mail.jp
IMAPのメールボックスを提供するプロバイダ。携帯やPC向けのWebメールも提供。 - xGate
携帯電話やPDA、PCから社内のメールサーバーにアクセスするためのWebメーラー。
参考文献
- mobileimapで快適携帯メール生活
UNIX USER 2003年8月号に書いた記事です。