今日は夕方から、メーリングリストマネージャの Mailman の設定にハマっていました。
そもそもは、Web管理画面から新たなメーリングリスト(ML)を作るときに「ドメインがひけない」的なエラーが出て作れなかったところから始まったので、なにか名前関係の設定が悪いのだろうと思うのですが、そこは解決せずに(笑)、とりあえず急ぎMLを立てるために行った工夫を、メモとして残しておきたいと思います。


ちなみに Mailman の Web の create 画面で出たエラーは、これ、

Error: Unknown virtual host: xxxxxxx.com


どうやって名前を引きにいって、誰が答えている(あるいは答えるべきなのに答えていない)のかがよくわからなかったので、本件は放置です(/etc/mailman/mm_cfg.py にドメイン名を直書きしてからは Web で管理できるようになることは判っています)。

今回はWebは使わず、すべてコマンドラインからの作業を行いました。

Mailman の初期/全体設定

# yum install mailman
#LANG=C;/usr/lib/mailman/bin/mmsitepass 
#LANG=C;/usr/lib/mailman/bin/mmsitepass -c

 Mailman のサイトパスワードとリスト生成権限者のパスワードを設定。
 LANGを指定しているのは、日本語メッセージのコードにターミナルを合わせるのが面倒だったから。

新規ML(名前は kyouyuu)を作成

# /usr/lib/mailman/bin/newlist 
Enter the name of the list: kyouyuu
Enter the email of the person running the list: (私のアドレス)@gmail.com
Initial mailman password: (パスワード入力)

表示された alias の一覧をばっとコピーして、/etc/aliases に貼り付け。

# newaliases
# /etc/init.d/mailman start 
# /etc/init.d/httpd restart

 newaliases して、一応各サービスを再起動(再起動が必要かどうかはわからない)。

 
 メンバの追加もコマンドラインから。

# /usr/lib/mailman/bin/add_members -r - kyouyuu

 ”-”を指定すると標準入力から受け取ったメールアドレスを登録するので、今回は2,3件を手入力。リダイレクトとかパイプとかで喰わせてもいいかもしれない。


 ここでメール送信のテストをするも配送されない(gmailはどこから来たメールでも受け取るようで受信できたのだが、他のアドレスでは reject された)。
 原因は kyouyuu@localhost.localdomain という From でメールを出そうとしていることにある模様。でもML自体はできているので、ここからは、MLの設定を変更して何とか動かそうとする試行錯誤をしました。


既存MLの設定の変更

 MLの設定ファイルは、/var/lib/mailman/lists/(ML名)/config.pck です。
これに気づかず、/etc/mailman/mm_cfg.py ばかりに気を取られていると、私みたいに半日をつぶすことになります。


 config.pck はバイナリファイルなのでこのまま編集することはできません。dumpdb コマンドで内容を見ることができます。

# /usr/lib/mailman/bin/dumpdb /var/lib/mailman/lists/kyouyuu/config.pc

 件数が多いので、 | grep local に喰わせてみると、あったあった、こんな設定が。

    'host_name': 'localhost.localdomain',
    'web_page_url': 'http://localhost.localdomain/mailman/',


 修正するには、withlist コマンドを使用。

/usr/lib/mailman/bin/withlist -l -i kyouyuu
>>>> m.host_name
> 'localhost.localdomain'
>>>> m.host_name='xxxxxxxxxx.com'
>>>> m.web_page_url
> 'http://localhost.localdomain/mailman/'
>>>> m.web_page_url='www.xxxxxxxxxx.com'
>>>> m.Save()

 変数名そのまま入力で、現在の値を表示、”=”で代入ですね。入力の終了は Ctrl-D です。ロックが解除され、保存されます。 m.Save() をお忘れなく。


 これで無事メールが配送されるようになりました。ふぅ。ここまでで約5時間。夕方からの時間をすべて食いつぶしてしまいました^^;
 ここから先は、設定方法がわかったのが嬉しかったのでその他の設定項目について色々見ていました。1時間くらい。


その他のML設定項目

メールタイトルの変更

 メールタイトルのプレフィックスは、 subject_prefix で指定します。デフォルトでは [ ] 内にML名があるだけです。

    'subject_prefix': '[Kyouyuu] ',

 これを、[ML名:00000] のように ML名と 5桁の数字になるようにしたいと思いました。

# /usr/lib/mailman/bin/withlist -l -i kyouyuu
>>>> m.subject_prefix='[Kyouyuu:%05d]'
>>>> m.Save();

 これでOK。

リプライ先をMLに

 デフォルトでは、MLに配送されたメールに対して返信を行おうとするとメール送信者宛になってしまいます。これをML宛になるようにします。設定する変数は、reply_goes_to_list(default:0)です。

# /usr/lib/mailman/bin/withlist -l -i kyouyuu
>>> m.reply_goes_to_list=1
>>> m.Save()
メール本文のヘッダ/フッタの変更

 メール本文の先頭や末尾に、MLの情報や注意事項などを入れるには、msg_header, msg_footer, digest_header, digest_footer に設定します。以下はそれぞれのデフォルト値です。

'msg_header': ''
'msg_footer': '_______________________________________________
%(real_name)s mailing list
%(real_name)s@%(host_name)s
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
'
'digest_footer': '_______________________________________________
%(real_name)s mailing list
%(real_name)s@%(host_name)s
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
'
'digest_header': ''


その他想像ですが(調べろよ(笑))気になるもの:
  convert_html_to_plaintext:  HTMLで投稿されたメールをプレーンテキストにして配送するオプションかな? デフォルトで True
  archive: メールをアーカイブするかどうか。デフォルトTrue。関連して archive_private や archive_volume_frequency など。archive_private のデフォルトが 0 というのが(想像では、デフォルトではメールアーカイブが世界中に晒されてしまう)怖いですね。
  send_reminders: 月1回、あなたはこのMLのメンバですよというメールを送る。デフォルト true。



.