SquirrelMailを改造する

●Squirrel Mailを改造する

SquirrelMailはデフォルトでは色々と不満な点があるので、これをぶりぶり改造していきます。

●用意するもの

→エディタ
これはなんでも構いません。viでもメモ帳でもTeach Textでもお好きにどうぞ。

→SquirrelMail
これを使っていない方はこの先読んでも無駄だと思います。

あとは必要に応じてブラウザやFTP・SSH/Telnetクライアント等を用意して下さい。

●Receivedヘッダの改造

注:このコンテンツはもともと「X-Mailerの改造]にあったものの転載・改修です。

SquirrelMailからメールを出すと、メールサーバの付けるReceivedヘッダの前にSquirrelMailが独自にヘッダを付けます。このヘッダにはSquirrelMailにログインしたマシンのIP、ユーザ名と、御丁寧にもProxyサーバの吐き出すX-Forwarded-Forまで付けてくれます(X-Forwarded-Forは値が空だとと付けません)。こここまで丁寧にやられると(自宅鯖の場合)ローカルネットワークの構成がバレバレ、(バーチャルホストのアドレス等で送っている場合)ユーザ名はバレバレ、(会社や学校から送っている場合)何処から送ってるかも見え見えで気分が悪いのでこの際潰してしまいましょう。

Squirrel Mail1.4.2の吐くReceivedヘッダ
Received:
from
送信したWebサーバのホスト名 ([Webサーバのホストを逆引したIP])
(proxying for
X-Forwarded-forのアドレス)
(SquirrelMail authenticated user SquirrelMailに
ログインしたユーザ名);
by
SquirrelMailを呼び出したホスト名 with HTTP;
Sat, 31 Dec 2005 23:59:59 +0900 (JST)
例えば私がip10-157-15.yuaiho.com <-> 172.10.157.15と言うホスト/IPで、proxy.yuaiho.net <-> 172.15.159.251と言うProxyサーバを経由して、web.yuaiho.netにあるSquirrelMailにyuaiho17でログインしたとすると、以下のようになります。
Received:
from
proxy.yuaiho.net ([172.15.159.251])
(proxying for
172.10.157.15)
(SquirrelMail authenticated user
yuaiho17);
by
web.yuaiho.net;
Sat, 31 Dec 2005 23:59:59 +0900 (JST)

では早速改造しましょう。尚、改造にはPHPに知識が必要ですので、バックアップを取ってから改造に移りましょう。改造するファイルは

【/SquirrelMailが入ったディレクトリ/class/deliver/Deliver.class.php】

です。その440行付近を見て下さい。その色々と情報がつまった患部です。

【図01、改造患部】

↑Mac用テキストエディタのmi(旧ミミカキエディト)を使っています。

この$header = array();から$header[]=" $date".$rn;までが患部ですね。ばっさり消してもいい気がしないでもありませんが、430行目あたりに「知識ねぇのにいじるな!!!」とか書いてありますし、見えない所で不都合とかが出ると嫌なので以下のような感じでコメントアウトして他の値を入れておきましょう。

WIDTH=497
Received: from remote 〜 with HTTP; $dateが代わりに入れた値です。

SquirrelMailをセットアップして使えるぐらいの方が、PHP/Perlの心得が全く無いとは思えませんが、よく分からない方は上記の部分の$header[]の頭の部分に軒並み//を付けてコメントアウトし、Received: from remote 〜 with HTTP; $dateの部分だけを弄る事をお勧めします。(ヘッダがごっちゃになるので$rnは削除しない方がいいでです。)

●X-Mailerの改造

これは「X-Mailerの改造」に任せてもいいのですが、せっかくなので書いておきます。

X-Mailerは同じDeliver Classの488行目にあります。

【図02、X-Mailer患部】

ここの
$header[] = 'User-Agent:〜
と言う部分がそれです。

セキュホがあるバージョンを使っていることがうっかり知れたら厄介かも知れないので、バージョンは消しておきましょう。

「.$version」の部分だけ撤去すればOKです。

●Message-IDも改造

 Deliver.classを開いているついでにMessage-IDも改造してしまいましょう。

 Deliver.classで付加されるMessage-IDには、メール送信時に「compose.php」を呼び出したマシンのIPが入っています。まぁ鯖のREMOTE-ADDRが外に漏れるのは仕方ないことですが、ローカルIPが漏れるのはあまり気分が良くありませんので、これも潰します。

【図03、Message-IDヘッダ】
Squirrel Mail1.4.9の吐くMessage-IDヘッダ
Message-ID: <REMOTE-PORT.REMOTE-ADDR.タイムスタンプ.squirrel@HTTP-HOST>

※タイムスタンプとはUNIX TIMEのことです。squidのログや2chのスレッドキーなどに採用されているあの10桁の数字です。

例えば私が172.10.157.15:1788と言うIP:ポートで、web.yuaiho.netにあるSquirrelMailに2006年12月31日23:59:59にSquirrelmailからメールを送信したとすると、以下のようになります。
Messages-ID: <
1788.172.10.157.15.1167609599.squirrel@web.yuaiho.net>

※タイムスタンプはWikipediaの「2006年」の項目から持ってきました。

 まぁ、リモートポートなんかはどうでもいいのですが、LANのIPが出てるというのは管理者的にはあまり面白くありません。REMOTE-ADDRの部分をばっさり潰してでもいいのですが、あんまり潰すと問題発生時の追跡が出来なくなるので、IPをSHA1かMD5のハッシュで埋める方向で行きます。

 患部はDeliver.class.phpの400行目前後です。

【図04、Message-IDの患部】
WIDTH=32

この図04では404行目の
$message_id.=$REMOTE_ADDR;
の部分ですね。

md5のハッシュにするには以下のように書き換えます。

【図05、md5への書き換え】
WIDTH=32

これでさっきのREMOTE-IPがハッシュ化されます。多少Message-IDが長くなりますが、Postfixは何も文句を言ってこなかったので大丈夫でしょう。

●メールボックスにアイコンをつける

 今日び、CUIベースのメーラ(MUA)を除けば、大体のメーラはボックスの横にアイコンがついています。しかしSquirrelmailにはありません。configureでplug-inにはそれっぽいのがありますが、有効にしても画面に出てきません。そこで、ソースを改変してアイコンを入れてしまいます。

●下準備

 アイコン画像を準備を準備する必要があります。標準でついてくる「images」フォルダのものを加工してもいいのですが、環境によってはPNGが透過せず汚いので、透過GIFで作ったほうが良いと思います。画像サイズはすべて16x16[px]が適当です。

 デフォルトの場合、最低限、INBOX用とSent、Draft、Trash、一般フォルダ用を作っておかないとアイコンがあったりなかったりになります。

 出来たらimagesディレクトリに放り込みます。

 さて、準備が出来たらソースを改変します。患部は「/squirrelmailの入ったDir/src/left_main.php」の67行目付近です。

【図06、left_main.php】
WIDTH=32

この、
if($status !== false){

$line.= '<a href〜
の間に以下のようなソースを挟み込みます。「ソースコード」は実際に改造される方用です。

【図07、left_main.php】
WIDTH=32

ソースコード

 71行目から83行目が改造部分です。INBOXに新しい/見ていないメールあると「INBOX_new.gif」と言う画像を、来ていないと「INBOX_nnm.gif」が表示されるようにしました。あとはファイル名で何をやっているかわかると覆います。

 以下が改造後のメールボックス部分です。画像はかつて一大シェアを誇った某ブラウザのアイコンリソースから持ってきました。まぁ個人使用なので問題ないでしょう。
 ゴミ箱関連はよくわかりませんでした。

【図08、改造後のleft_main.php】
WIDTH=32

*アイコンリソース:旧MacOSがアイコンを保持していた部分のこと

●日本語対応改造

 これは多くのサイトに載っている改造ですが(上三つも載ってるかもしれませんが)、Squirrelmailの日本語文字化けを解消します。
 改造するファイルは「/squirrelmailの入ったDir/functions/i18n.php」です。

mb_convert_encoding($ret, 'EUC-JP', 'AUTO')
の部分を、軒並み
mb_convert_encoding($ret, 'EUC-JP', 'ASCII,JIS,EUC-JP,UTF-8,SJIS')
に書き換えます。

これで文字化けが解消されます。

●アドレス帳からのメール作成に名前を入れる。
(2007.02.08追加)

 SquirrelMailはアドレス帳からメールを作成すると、To:欄にメールアドレスしか入りません。しかし通常多くのメーラ(MUA)は"Yuaiho Aikinsetsu" <address@mail.yuaiho.com>のように"名前" <アドレス>と言うようなTo:欄を設定しています。SquirrelMailもこれに準じさせましょう。(例に示したアドレスは存在しません)

 改造するファイルは「SuirrelMailのディレクトリ/src/addressbook.php」です。改造箇所は460行目付近です。

【図09、addressbook.php】

ここのemail = 〜の部分を以下で置き換えます。

これを保存して、もう一度squirrelmailのアドレス帳を開いてメールを作成すると"名 姓" <addr@host>のようになります。姓、名にしたい場合は以下です。

●最後に

 やはり目に見える改造が一番ですね。これで快適なSquirrelMailを満喫して下さい。
 あとCalenderのPlug-inを有効にするとOutlookやIlohamailみたいにカレンダー画面が出てきます。

 最後になりましたが、改造は自己責任でお願いします。何が起こっても私は責任を取れませんし取りません。

TopHome