木曜日, 12月 11, 2014

メーリングリスト制御スクリプトのご紹介

 スパム対策の話ではないのだが、私の自作のメーリングリスト制御スクリプトについて。
 私は、ある研究会のためにボランティアでメーリングリストを運用している。かつてはメーリングリストで議論も行われていたが、そのようなメールの受信を歓迎する会員ばかりではないので、議論は掲示板でやってもらい、メーリングリストの用途は原則として、事務局からの通達や会合案内、会員からの挨拶や情報提供や議論の開始・経過・結果報告などに限ることにした。
 それでも、会合案内に対する出欠回答(他の会員にとっては無駄な情報)をメーリングリストに同報してしまう人や、添付ファイルは投稿しないように(サーバの過負荷や受信者のPCの負荷の原因になるので)言っていても間違って投稿する人がいるので、メーリングリストはモデレートのポリシーにした。
 Majordomoのような高度なメーリングリストプログラムならモデレートのポリシーは設定だけで実現できるが、私は独自のメッセージ加工のためにGAWKスクリプトでメーリングリストを実現しているので、モデレートのポリシーは前段にPerlスクリプトをかませることで実現した。私以外の人からの投稿はいったん私に送り、私はメーラーBecky!の「手を加えずに転送」の機能を使って再投稿するという運用方法である。この時、メールのDate、From、To、CC、Subject、本文は元のままになるが、添付ファイルをはずすことはできる。再投稿した私のアドレスはResent-Fromヘッダに記録されるので、Perlスクリプトはそこに私のアドレスがあることを確認して配信用スクリプトへ送るという仕組みである。なお、添付ファイルが投稿された時には、それをはずしただけで再投稿するのでなく、ファイルをウェブのダウンロードサービスに掲載したことの説明を添えて、通常の転送で再投稿するようにしている。Perlスクリプトは、Fromが私のアドレスである場合も配信用スクリプトへ送る。

 その後、会合案内は時間遅れなしに配信された方が会員は嬉しいだろうと考えたので、新規メールで添付ファイルがない(ヘッダから添付ファイル付きとわからない場合でも、メール本体が30,000バイト以下である)ならば非モデレート(即時配信)、返信メールがメーリングリストに同報されたものと添付ファイル付きの投稿メールはモデレートというポリシーにした。
 会員には、「Toにメーリングリストアドレス一つだけが指定され、かつ添付ファイルがない投稿メールは即時配信されます。この条件に合わない投稿メールは保留され、私が確認してから配信します。会合の出欠回答など、全会員に知らせる必要がない情報は配信しません」と説明している。メーリングリストで配信されたメールに対する「全員宛返信」でメーリングリストに宛てられた返信メールでは、メーリングリストアドレスはCCに、またはメーラーによってはToに元の送信者に併記して指定されているので、「Toにメーリングリストアドレス一つだけ」の条件に合わず、モデレートになる。
 なお、「全会員に受信してもらう必要のない内容の返信を、わざわざToをいじって即時配信の条件に合わせて送信することはしないでください」と要請している。
 これで私のモデレート作業は楽になった。

 このスクリプトを私のサイトで「半モデレート・ポリシーのメーリングリスト用制御スクリプト」というコンテンツとして公開した。広く使われているMajordomoの前段にかませる方法を説明しているが、私はMajordomoを使っていないので、もし間違いがあったら指摘してください。
 なお、ポリシーに反して返信メールでわざわざToをいじる人がいるなら、In-Reply-Toヘッダがあることをもってそれを見破ることができるので、その方法も説明している。しかし、過去のメールやよそから得たメールを返信操作で引用した新規トピックが即時配信されなくなるので、意図的にポリシーに反することをしない善人ばかりのメーリングリストでは、そこまではしない方がよいと思う。
 需要が多いとは思わないが、このような半モデレートのポリシーというものもメーリングリストによっては便利なことがあるというアイデアの紹介のつもりでコンテンツを掲載した。