qmail でメーリングリストを利用するには?
SERVER
qmail 1.03
qmail とは、http://www.jp.qmail.org/ にて公開されている、「安全確実で、信頼できて、高性能で、簡潔なメイル配送エージェント」 が売り文句になっているメールサーバです。メールは各自のホームディレクトリへ Maildir 形式で保存されますので、アクセス権の問題や障害時の耐性の強化など、いろいろな効果が期待できるようです。
今回は、qmail にてメーリングリストを利用したいとのお話があったので、少し調べてみることにしました。
個人的にはあまり興味がなかったため、メーリングリストとは実際にはどんなものなのか、はたして便利なものなのかなど、行き届かないところも多いので、その辺りの調査も含まれています。
メーリングリスト
メーリングリストとは、(不特定) 多数のユーザーが、メールを利用して情報を交換するものだと認識しています。
そのメールはメーリングリストに加入している人々に送られ、メンバーは自分の力の及ぶ内容には回答してお互いの知識を深めていく、という持ちつ持たれつが在るべき理想のかたち…。メーリングリストというとこんな感じだと思ってます。
不特定多数であるから、各自が任意に応答できるわけだから、匿名性といいますか、トラブルを防ぐために、送信者の実メールアドレスは伏せる必要がある…、また、多数のユーザが自由に入退会できるような管理ページがあると便利…、など、メーリングリストと一口に言うと、こういった管理ツールも含まれるのでしょう…。
なにはともあれ、実際にどういうものなのか、どうしたら実装できるのかを調べてみようと思います。特に、仮想ドメインで運用できるかということと、既存環境の qmail に無理なく追加できるかが、関心どころです。
ezmlm
調べてみて見つかったのが、 ezmlm という qmail 用のメーリングリストでした。
機能としては専用のコマンドをつかって、メンバーを追加したり削除したりといったことができる感じなのですが、 .qmail ファイルに追記したりするのと何が違うのでしょう…。qmail ならば CGI からの .qmail の編集もさほど大変ではないでしょうし。
「Reply-To: を設定することで、送信者ではなくメーリングリストへ送信するように…」 というお話も書いてあったので、なんだか思い描いていたメーリングリストとはずいぶんと違うような気がしてしまいました。
でも、細かな設定をみてみると、件名の頭に特定の文字をつけたり出来るようなので、純粋に .qmail で分配するのではなくて、プログラムをはさんでいろいろと調整してくれるのかもしれないですね。って、当たり前のことかもしれないですけど。
なのでもう少ししっかりと調べてみると、いろいろと、とても便利な機能が備わっているようでした。
今まではすっかり、Web サイトから入退会の手続きを取るものかとばっかり思っていたのですけど、このツールを導入することで、メーリングリストの入退会用アドレスが用意されたり、そしてその登録手続きの案内や、登録されるメールアドレスの有効性などをしっかりと行ってくれるそうです。
他にも、登録されているアドレスからしかメールを受け付けなかったり、メールがループしてしまうことを阻止したりすることも出来るようで、これはなかなか便利そうかもしれないです。もっとも、個人的には利用する機会は今のところないのですけど。
あと関心どころの、既存の qmail 環境にスムーズに搭載できるかというところなのですけど、これもどうやら問題なさそうです。
各ユーザ単位での組み込みが可能とのことなので、必要なユーザのみがセットアップすればよさそうです。ただ、仮想ドメインの場合はどうなるか、実験してみないとわからないのですが…。
ezmlm を使ってみる
調べてみても概要こそわかるものの、実際の具合が良くわからないので、あとは自分でやってみることにします。 なお、今回は仮想ドメインでのメーリングリスト構築を想定しています。最初の方のメーリングリスト構築は試行錯誤なので注意してください。
まずは http://mlm.qmail.jp/ezmlm/ より ezmlm-0.53.tar.gz をダウンロードして、それを目的のサーバの /usr/local/src/ ディレクトリへコピーしました。そしてそれを展開してインストール作業を行います。
cd /usr/local/src/
tar xvzf ezmlm-0.53.tar.gz
cd ezmlm-0.53/
make; make man
make setup
これでインストール作業は完了です。
続いて実際に、実験用のメーリングリストを立ち上げてみようと思います。
今回は仮想ドメインでの使用を想定しているので、まずはメーリングリスト用の仮想ドメインをひとつ用意することにします。用意したのは、一応架空のもので表記しておきますけど、ml.test.domain というドメインです。これを普通に qmail に仮想ドメインとして設定したものとしてお話を進めます。なお、このドメインの管理アカウントは ml_test とします。
"ml_test" アカウントにてログインしたら、次のようにしてメーリングリストを構築してみます。
/usr/local/bin/ezmlm/ezmlm-make ~/ezmlm ~/.qmail-ml testml ml.test.domain
これで ml@ml.test.domain というアドレスにて、testml メーリングリストが完成したはずです。正常にメーリングリストが完成しているのなら、これによって次のメールアカウントが自動的に有効になっています。
ml-subscribe@ml.test.domain メーリングリストに入会するときに使用するアドレス ml-unsubscribe@ml.test.domain メーリングリストから退会するときに使用するアドレス ml-get.12@ml.test.domain アーカイブを取得したいときに使用するアドレス ml-help@ml.test.domain
ml-request@ml.test.domainメーリングリストの説明を取得したいときに使用するアドレス まずはさっそく、ml-help@ml.test.domain あてにメールを送信してみましょう…。
本文は特になくてよくて、上記のメールアドレスへメールを送ってあげると、返信としてメーリングリストの説明が自動的に返されるはずなのです。…が、エラーとなって戻ってきてしまいました。
エラーメッセージを見ると、 "ezmlm-manage: fatal: I do not accept messages at this address" とのこと。どうやら ezmlm 自体へはわたったようですけど、送信に使用したメールアドレスは受け入れてもらえなかったようです。
もしかすると入会してからでないとダメなのかもしれないですね…。
なのでまずは ml-subscribe@ml.test.domain へメールを送信してみます。こちらも件名や本文は特に必要ありません。そして送信してみたのですが…、やはり同じエラーが帰ってきてしまいました。
もう一度、アーカイブに含まれていた INSTALL ファイルを見てみると、3 番目の引数は ユーザ名 にハイフンをつけて、 2 番目の .qmail-xxx で指定した xxx の部分に指定したものをつけた感じにしないといけないようです。
なのでいったん .qmail-ml とそれから始まる名前の .qmail ファイルを削除し、ezmlm/ ディレクトリも消去した上で、もう一度次のようにしてメーリングリストを登録しなおしてみました。
/usr/local/bin/ezmlm/ezmlm-make ~/ezmlm ~/.qmail-ml ml_test-ml ml.test.domain
そしてもういちど、 ml-subscribe@ml.test.domain へメールを送信してみると、今度はしっかりと、登録手続きが始まったことを示すメールが届きました。あとはこれをそのまま、返信しなおせば登録完了となるはずです…。けれど、送信してみると再びエラーとなってしまいました。エラーの理由は、メールボックスが存在しないということでした。
あて先をみると、なんとも長いあて先なのですけど、その中で気になったことといえば…。先頭が ml- からではなく、そのまえのユーザ名も含めた ml_test-ml- から始まっていることと、それに加えて最後の @ 以下が仮想ドメインになっているというところでした。
ためしに返信のあて先を少し調整して、先頭のユーザ名を取り除いて送信してみると、今度は無事、登録の完了を示すメールを取得することが出来ました。
なるほど、これでだいたい登録の仕方がわかりました。とか言いつつも、まだ失敗するのですが…。失敗ではありますけど、どういう設定をしたら失敗したか、書いておきます。
まず、該当する仮想ドメイン ml.test.domain を管理するアカウントを test_domain とします。その上でこのホームディレクトリにて、作成したいメーリングリストのアドレスを登録します。ここでは ml@ml.test.domain としたいので、 .qmail-ml ファイルを作成します。この中で、 ml_test@192.168.0.1 などというように、本ドメインで ml_test アカウントへメールが届くようにするのは、一般的な仮想ドメインのときの設定と同じです。
そしてその ml@ml.test.domain を受け取る ml_test アカウントでログインし、そのホームディレクトリにて Maildirmake ではなく ezmlm-make を使って、次のようにメールボックスを作成します。
/usr/local/bin/ezmlm/ezmlm-make ~/ezmlm ~/.qmail ml ml.test.domain
これで上手く行くはず…、と思ってためしに ml-subscribe@ml.test.domain へメールを送ってみると、ezmlm にわたることなく qmail によってエラーとして返送されてしまいました。どうやらメールを受けるアカウント ml_test の先でのハイフンつきの .qmail ファイルが見つかっていないようなそんな感じです。
そうすると…、また、仮想ドメインの管理アカウントを ml_test に戻して、次のように登録すると上手く行きそうな気がします…。
/usr/local/bin/ezmlm/ezmlm-make ~/ezmlm ~/.qmail-ml ml ml.test.domain
が、こうしてみると、たとえば ml-help@ml.test.domain へメールを送ってみても、返事が戻ってくることはありませんでした。ためしに .qmail-ml を含めた .qmail-ml-* を .qmail-* に変更してみましたけど相変わらずメールはどこかへ行ってしまうようです。
もう少し調べてみると、なにやら、.qmail-ml ではなく .qmail を指定すること、メーリングリストの部分はハイフンがあったほうがよさそうなこと、このような情報が得られたので、ためしにそのように登録しなおしてみました。
/usr/local/bin/ezmlm/ezmlm-make ~/ezmlm ~/.qmail test-ml ml.test.domain
これでも、test-ml-subscribe@ml.test.domain へメールを送信してみると、今度は応答こそあるものの、やはりエラーとなってしまいました。エラーメッセージは上記でも何度も出ていた ezmlm からのエラーです。
仮想ドメインでメーリングリストを利用する
試行錯誤しつつも調べていたところ、仮想ドメインでの設定方法が見つかりましたので、改めて記載することにします。
環境としては、仮想ドメイン ml.test.domain を ml_test というアカウントによって管理している、すなわち qmail の virtualdomains にて ml.test.domain:ml_test という行が指定されている場面を想定します。
ここで ml@ml.test.domain というメーリングリストを構築する場合の方法を紹介してみようと思います。
まずは ml_test でログインします。そして次のようにしてメーリングリストを作成します。
/usr/local/bin/ezmlm/ezmlm-make ~/ezmlm-ml ~/.qmail-ml ml ml.test.domain
このようにするとホームディレクトリに、.qmai-ml ファイルとそれに付随する .qmail-ml-* ファイル、およびメーリングリスト関連の情報が保存される ezmlm-ml/ というディレクトリとが作成されます。
そして作成された ezmlm-ml/ ディレクトリ内の inlocal ファイルを編集します。内容は最初はメーリングリスト名だけになっているので、その先頭にアカウント名とハイフンをつけてあげます。今回の例では次のようになります。
ml_test-ml
これで、ml-subscribe@ml.test.domain などにメールを送信したときなどに、システムが正常に機能するようになります。なお、このファイルは ezmlm-make を実行するたびに変わる可能性があるようなので注意が必要です。