ID-Blogger

メーリングリスト管理システム「Majordomo」を無理矢理メルマガシステムっぽく改修

TLAS(Turbolinux Appliance server)で稼動させているサーバーでメルマガ発行できるシステムを構築しなければならなくなりまして、いろいろ調査した末にメーリングリストのシステムを流用した方が早いという結論に達しました。
メルマガサービスの運用にメーリングリスト管理システムを改修して使ってる所も実際多いみたいですね。

TLASには「Majordomo」というメーリングリスト管理システムが最初からインストールされているのでコレを使うことにしたのですが、テスト的にメアド登録・メルマガ発行・メアド解除までやってみると英語のメッセージがガンガン入ってる状態...

Nob's Home Pageさんで「majordomoの日本語化」のパッチなんかも紹介されていたのですが、時間が経ってしまっている事もあってか残念ながらリンク切れ。

運用するのに流石にこれではイカンだろうと思い改修にチャレンジしてみました!
あくまで備忘録的な内容ですw


やっぱり「Tera Term」

とりあえずSSHでサーバに接続。

の前に、SSHクライアントで何か便利なので出てないのかな~と調べましたが、この分野はそんなに進化してないみたいですね...
結局「Tera Term」がイイっぽいですw

以前のTLAS絡みの記事の時にも書きましたが、UNIXコマンドなんてあんまり使う機会がナイのですぐ忘れてしまいますよ...
という事でpenguin-19さんの「知っておきたいUNIXコマンド」のコマンド一覧がまた役に立ちました!
あとk-tanaka.netさんの「UNIXコマンド」にもお世話になりました。


「Majordomo」は何処に?

気を取り直して「Tera Term」からサーバに接続。
まずは「Majordomo」本体が何処にあるのかをサルベージ。
login: xxxxx
Password:*****
Welcome to Turbolinux.
[xxxxx]$ su root  ←←root権限になるの忘れないで
Password:*****
[root]# find / -name majordomo  ←←findコマンドで検索
ホントはサーバーに不可がかかるからオススメされてないんですが、おもいっきり最上階ディレクトリから検索しちゃいました...
結果としてTLASの場合は「Majordomo」本体は /usr/lib/majordomo/ のディレクトリにあるのが判明しました。
ファイル名もそのものズバリ「majordomo」ですw


「Majordomo」本体を無理矢理FTPで書き換える設定

本来ならここでviエディタを使わなきゃイケないんでしょうが、正直メンドクサイので試しにサーバー管理者(rootじゃない)権限でFTP接続。
とりあえず /usr/lib/majordomo/ のディレクトリまでは行けたのですが、やはりrootが所有者でパーミッションが755に設定されており、ダウンロードは可能でしたがアップロードは不可という状態でした。

FTPは通信が暗号化されないという事情から、サーバー側の設定でroot権限ではFTP接続できない場合がほとんどですが、「Tera Term」から「Majordomo」本体ファイルのパーミッションを変更して無理矢理FTPで書き換えできるようにしました。
セキュリティ上はあまりよろしくナイ手法なんですが...

[root]# cd /usr/lib/majordomo/  ←←とりあえずディレクトリ移動
[root majordomo]# chmod 777 majordomo  ←←パーミッション777に変更
FTPでパーミッションを確認すると...おぉ!ちゃんと777になってる♪
あとで何か問題が発生したら怖いのでバックアップ用にコピーも作っておきましょう。

[root]# cp majordomo majordomo-backup  ←←majordomoのコピー作成

これで下準備は完了です。


「Majordomo」本体を改修

「Majordomo」本体をFTPダウンロードしたらメモ帳等で改修を行います。
ちなみに私は「サクラエディタ」を使ってます。


まずは登録時に配信される「Welcome to the ○○○○○○ mailing list!」とかのウェルカムメッセージを改修。
1780~1850行目付近にある sub welcome {~} サブルーチンの中で、「print MSG」に絡む部分がメールに書き込まれる内容になるのでこの辺を任意に#でコメントアウトします。
例えばこんなカンジ。

#print MSG "Welcome to the $list mailing list!\n\n";
#print MSG "Please save this message for future reference.  Thank you.\n";

自分の場合はウェルカムメッセージを全部コメントアウトしてしまって、Majordomo側の
newinfoコマンドメールで書き換えた入会案内の文章のみを使う事にしました。
メッセージ自体を日本語に書き換えてもみたのですが、どうもファイルの文字コードがうまくいかないようで、newinfoコマンドで書き換えた入会案内の文章の方が文字化けしたりと難航したので諦めました。


次に登録時にシステムが返す2通目のメールの内容にあたる240~340行目付近の sub do_subscribe {~} サブルーチンを改修。
「Succeeded.」があまりに味気ないのでこんなカンジに。

print REPLY "登録が正常に完了しました。\n";
#print REPLY "Succeeded.\n";

同じように登録解除時にシステムが返すメールの内容にあたる360~510行目付近の sub do_unsubscribe_all {~} サブルーチンを改修。

print REPLY "解除が正常に完了しました。\n";
#print REPLY "Succeeded.\n";

あと気になるのはシステムが返すメールのタイトルで「Majordomo results: =?ISO-2022-JP○○○○○○○○○」という部分。
これは160行目付近のメールタイトルの成形部分を改修。

# Open the sendmail process to send the results back to the requestor
&sendmail(REPLY, $reply_to, "Mail System Message");
#&sendmail(REPLY, $reply_to, "Majordomo results$sub_addin");

ここも日本語にしたかったのですが文字化けしたのでスッパリ諦めました。

だいたいめぼしい改修点は以上です。
最後にmajordomoをFTPでアップロードしてパーミッションを755に戻すのを忘れないようにしましょう。


とりあえずバタバタと改修したのですが、「Majordomo」自体はPerlで書かれているようなのでジックリ見直せばいろいろ修正できるのではないかと思います。
ただ「Majordomo」ももはや古いシステムなので「Mailman」とか「fml」とかを使った方がイイようです。