DeleGate による 簡易 WebMailer for imode


draft 2 : 2004/12/14 Hiroshi Suzuki <setter AT i-red DOT info>

BACK ( DGbeecon )


※ この文書は、覚え書き程度の物です。内容や、結果に責任は持ちません。
※ この内容を実行するためには、DeleGate8.10.3-pre10 にここ   にあげられているパッチをあてる必要がある場合もあります。
  DeleGate8.10.3-pre11以降が良いです。

imode で、自宅メールを見たがる約2名のために、DeleGate を使って POPサーバを見に行く WebMailer を立ち上げる。
WebMailer というのは、 あっくんの電子メール や、IMP、Squirrel Mail、ほか色々あるが、DeleGate でやろうと思えばできそうなのに気がつく。 今まで会社では、主に携帯向けには、WebSylpheed を改造したのや、あっくんの電子メールを改造したもの、また、IMP を少しいじったものを導入して 2K人規模くらいで使っていたのだが、あまりスマートにいけそうにないのでやめた。というか、ユーザ2人だし。
で、今回、主に、DeleGate がもつ機能、(POP/)NNTP->HTTP GW を使用した、が、そのままでは通信費が馬鹿高い imode で使うには家計にやさしくないし、画像の読み込みが遅くて/画面が狭くて使ってられない。

これを解消するために、以下のような措置を行う。
- 埋め込まれる画像を小さくする。もしくは、無くす。
- メッセージ(テンプレート)のカスタマイズで極力表示を抑える。

まず、DeleGate の ソースディレクトリから、必要なメッセージファイルとアイコン達を別ディレクトリにコピーする。
例)
まず、 delegate/icons , delegate/mssgs のディレクトリを作り
cp delegate8.10.3-pre10/src/builtin/icons/ysato/* delegate/icons/
cp delegate8.10.3-pre10/src/builtin/mssgs/news/* delegate/mssgs/

DeleGate の起動ファイルを以下のようにした。
/usr/sbin/delegated -P8080 ADMIN=user@example.jp OWNER=delegate +=/home/user/pop.conf

-- Contents of /home/user/pop.conf
MOUNT="* pop://popserver/* charcode=shift_jis"
# popserver を見に行き、出力文字コードは、shift_jis にする。

# MOUNT="/* pop://popserver/* charcode=shift_jis"
# プロトコル仕様上はこちらのほうが問題がない。

MOUNT="/-/builtin/icons/ysato/* file:/home/user/delegate/icons/*"
MOUNT="/-/builtin/mssgs/news/nglist.dhtml  file:/home/user/delegate/mssgs/nglist.dhtml"
MOUNT="/-/builtin/mssgs/news/artlist.dhtml  file:/home/user/delegate/mssgs/artlist.dhtml"
MOUNT="/-/builtin/mssgs/news/artline.dhtml  file:/home/user/delegate/mssgs/artline.dhtml"
# コピーしたファイル達を使えるように MOUNTする。

MIMECONV="shift_jis"
# pop サーバから取ってきた MIMEヘッダをデコードして shift_jis で出力する。
# これがないと、日本語タイトルが化ける。

REACHABLE="popserver"
RELIABLE="192.168.0.0/24,*.docomo.ne.jp"
REMITTABLE="+,file"
# 特に深い意味はない。

CACHEDIR="/home/user/delegate/cache"
DGROOT="/home/user/delegate"

LOGFILE='${LOGDIR}/${PORT}/[date+%Y]-[date+%m].${PROTO}'
ERRORLOG='${LOGDIR}/${PORT}/[date+%Y]-[date+%m].err'

HTTPCONF="ver:1.0" 
# 特に深い意味はない!
EXPIRE="60s"
# 特に深い意味はない...
-- End of Contents

delegate/icon 内の 必要なアイコンを ImageMagick の convert コマンドで、小さくした。
$ convert -geometry 12x12 -colors 2 delegate/icons/frogHead.gif delegate/icons/frogHead.gif
convert コマンドの詳細は、man convert で見て下さい。

メッセージをカスタマイズして、内容を軽くした。
とりあえず、この3つを変更すればよさそうなので、
/home/user/delegate/mssgs/artline.dhtml
/home/user/delegate/mssgs/artlist.dhtml
/home/user/delegate/mssgs/nglist.dhtml
内容は以下のようにした。

-- Contents of /home/user/delegate/mssgs/artline.dhtml
${art.NewSubj?
---<br>${art.NewSubj}<BR>}
<A HREF=${art.Anum}>${%04art.Anum}</A>-
<I>${art.From}</I>
${art.STime}
${art.Lines?[${art.Lines}]}
<BR>
-- End of Contents

-- Contents of /home/user/delegate/mssgs/artlist.dhtml
<BODY>
${req.search.Form_reply?${art.list}${exit}}
${req.search.Form_list?${art.list}${exit}}
 ${putmenu?
 ${num.min<num.anum1?
 <A HREF="${ref.purl1}">[<]</A><A HREF="${ref.purlp}">[<<]</A>
 :[<][<<]
  }
 ${num.anum2<num.max?
  <A HREF="${ref.nurl1}">[>]</A><A HREF="${ref.nurlp}">[>>]</A>
  :[>][>>]
  }
  ${0<num.anum1? <A HREF="../${grp.print}?Expire">[Chk]</A> : [Chk]}
  }
 <HR>
 ${art.list}
 <HR>
 ${art.emptys?Empty-Articles = ${art.emptys}<HR>}
 ${putmenu?
   ${expires?${expires}}
  }
</BODY>
<!-- generated by DeleGate/${ver} -->
-- End of Contents

-- Contents of /home/user/delegate/mssgs/nglist.dhtml
<TITLE> Newsgroups ${_grp.real} </TITLE>

<A HREF="./">[Top</A>/<A HREF="${grp.up}"><B>Up</B>]</A>
<B>Newsgroups `${_grp.real}'</B>

${grp.Layered?[Layered]/[<A HREF="${grp.real}?Flat">Flat</A>]
         :[Flat]/[<A HREF="${grp.real}?Layered">Layered</A>]} view.

<A HREF=Jump/?Menu>[Jump]</A>
<HR>

${grp.list}

<HR>
${num.article} articles, ${num.match}/${num.all} groups (${num.empty} empty)
<BR>
${expires}
<!-- generated by DeleGate/${ver} -->
-- End of Contents

これで、とりあえずは、imode でメールを見ることができたが、あくまで、"簡易" であるので、ページ分割などはやっていない。
他力本願だが、やってくれそうな人がいるみたいなので、発展してほしい。
なお、sslway を使用して、HTTPS化した方が好ましい場合もありますね。
また、ユーザ名/パスワード の入力フィールドが HTML の input ではないため、パスワードは隠し文字でキーで入力するのは至難の技であるし面倒でやってられない。私の場合、定型文や、辞書登録で対応したが、携帯の機種によっては、それら機能が、ユーザ名/パスワード入力ダイアログで使用できないものもあるようなので注意が必要。

謝辞
なお、これを行うときに、ユーザ名があまり一般的ではない、user%example.jp@popserver になっていたのと、Mozilla での URL内の エンコードされた "." に対する振舞に対応するために、DeleGate開発者である、佐藤さんに直して頂いた。いつもながら、超速対応である。
感謝である。
使い込むほど"味わい"が出てくる DeleGate である。

End