mobileimap: 携帯電話用の IMAP対応 Webメーラー

最終更新日: 2005-05-22 (公開日: 2003-04-08)


mobileimap とは?

mobileimap は携帯電話用の IMAP対応 Webメーラーです。au や i-mode などの携帯電話から IMAP サーバ上のメールを読むことが できます。CGIではなく、HTTP対応のサーバとして動作します。

新着情報

スクリーンショット

au の A3014S でのスクリーンショットです。 (この画面はやや古くなっています。最新版にはメールの検索とフォ ルダ名の検索のためのフォームが追加されています)

メール一覧 メールの表示 Webで返信 フォルダ一覧

必要なもの

動作を確認した機種

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サーバ

使い方

基本編

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 圧縮に対応したブラウザを 内蔵した携帯電話は存在しないようです (パケットが増えた方が儲 かるわけですから、そういうものでしょうね。もしあったら教えて ください)。

豆知識

デフォルトで「未読」のメールだけを読みたい

デフォルトで「未読」のメールだけを読みたい場合はメール一覧で 「未読」を選択した後でブックマークしてください。

既知の問題点

ダウンロード

GNU General Public License version 2 (日本語訳)に従ったフリーソフトウェアとして公開します。完全に無保証です。

関連リンク集

参考文献


Satoru Takabayashi