Majordomo を使ったフィルターリングの方法

 メーリングリストを運営上、一番大敵なものは"添付ファイルメール"です。
 ここでは、Configファイルなどを含め、いろいろな観点から調べてみました。
なお、ここでのバージョンは、majordomo-1.94.4とさせていただきます。
 共通事項として、フィルターリング対象メールを全てのマルチパートMIMEメールとします。 また、変更箇所を赤い文字で表示します。"#"はコメントアウトとします。


1.メーリングリストごとの設定

 各メーリングリストごとに設定したい場合は、configファイルを設定します。fooというメーリングリストの場合は、foo.configというファイルの中です。
 設定箇所は、"taboo_headers"セッションです。以下が、設定例です。

taboo_headers << END
/^Content-Type:\s*multipart/i
END

※書式については、『4.書式について』を参考にしてください。


2.メーリングリスト全体に反映させる方法 その1

 configファイルをいくつも設定するのが面倒な場合は、majordomo.cfにそういったセッションがあります。
 記述方法はconfigファイルと同じですが、すでにいくつか書かれているので付け足してください。

$global_taboo_headers = <<'END';
/^subject: ndn: /i
/^subject:\s*RCPT:/i
/^subject:\s*Delivery Confirmation\b/i
/^subject:\s*NON-DELIVERY of:/i
/^subject:\s*Undeliverable Message\b/i
/^subject:\s*Receipt Confirmation\b/i
/^subject:\s*Failed mail\b/i
/^subject:\s*Returned mail\b/i
/^subject:\s*unable to deliver mail\b/i
/^subject:\s.*\baway from my mail\b/i
/^subject:\s*Autoreply/i
/^x-sequence:/i
/^precedence: (bulk|junk)/i
/^Content-Type:\s*multipart/i
END

※書式については、『4.書式について』を参考にしてください。


3.メーリングリスト全体に反映させる方法 その2

 メーリングリストで、Subjectに連番をつけることはポピュラーなこととなってきました。デフォルトでは、resendを使用しますが、sequencerを使うとconfigファイルがうまく行かない場合があります(※筆者が日本語パッチを使用しているためかもしれない)。こういう場合は、sequencerそのものを改良します。また、2種類のsequencer(片方のファイル名を変更する)を使い分けることにより一部のメーリングリストだけと言う切り替えも可能です。

 以下のセッションを探します。

# check for administrivia requests
if (defined($opt_s) && ! defined($approved)
&& (/^subject:\s*subscribe\b/i ||
/^subject:\s*unsubscribe\b/i ||
/^subject:\s*help\b/i ||
/^subject:\s*RCPT:\b/ ||
/^subject:\s*Delivery Confirmation\b/ ||
/^subject:\s*NON-DELIVERY of:/ ||
/^subject:\s*Undeliverable Message\b/ ||
/^subject:\s*Receipt Confirmation\b/ ||
/^subject:\s*Failed mail\b/ ||
/^subject:\s.*\bchange\b.*\baddress\b/ ||
/^subject:\s*request\b.*\baddition\b/i ||
/^Content-Type:\s*multipart/i
)) {
&bounce("Admin request");
}


4.書式について

 主として、一番使うと思われるものを記述します。細かなものについては、majordomo.cfにすでにかかれている書式を参考にしてください。

・基本形として、"/"ではじまり"/"で終わります。


/Content-Type:multipart/
# "Content-Type:multipart"という記述がヘッダにあった場合、バウンズメールとして処理する。

・最後の"i"は、大文字、小文字を区別しないという意味です。


/Content-Type:multipart/i

・"^"記号は、行の最初という意味です。

・"*"は、スペースを飛ばすという意味です。

・".*"は、途中の文字列を省略するという意味です。


/Content-Type:multipart/mixed.*mixed/i

# Content-Typeではじまりmixedで終わる文字列を見つける。

・"\"は、記号などを記号を一つの文字として認識させるために用います。


/Content-Type:multipart\/mixed/
# "/"を一つの文字として扱う
そのほかに、@ / . ? * + ^ $ ( ) [ ] { } | \ - が有ります。


そのほか

 ここでは、メールのヘッダのキーワードが一致したものをバウンズさせる方法を書きました。そのほかに、メール本文のキーワードをフィルターリングする方法があるのですが日本語に対応していないそうです。

 今回、マルチパートMIMEをフィルターリングする方法を記述しましたが、そのほかについては好ましくないメールが届いた場合ヘッダを解析して追加するしかないでしょう。私の興味の持っている範囲で、以下に書き出します。
キーワード意味
/^Content-Type:\s*multipart/i全てのマルチパートMIMEメール
/^Content-Type:\s*multipart\/alternative/iHTMLメール
/^Content-Type:\s*multipart\/mixed/i添付ファイルメール
/^From:\s.*\@(.*\.)?foo.com/i例として、差出人がxxx.foo.comから出している人


5.注意

 フィルターリングが成功しても、これは送信者とそのメーリングリストの管理者にはバウンズメールとして届きます。くれぐれも、取り扱いには注意してください。


作者より:間違っている場所がありましたら教えてください


[トップページへ]
2001/03/10