エラーメール解析プログラム (libexec/error) /usr/local/libexec/fml/error は &fml4; の mead (libexec/mead) に相当するエラー解析プログラムです。 $use_error_mail_analyzer_function を yes にすると、 エラー解析機能が有効になります。 ちなみに、 デフォルトで $use_error_mail_analyzer_function は yes です。 つまりエラー解析機能は有効になっています。 このあたりは &fml4; と異なります。 つまるところ、 &fml8; では &fml4; でよく使う機能は初めから有効になっています。 概要 ML作成時に $ml-admin アドレス宛のメールは /usr/local/libexec/fml/error を呼び出すように設定されます。 /usr/local/libexec/fml/distribute などと同様に /usr/local/libexec/fml/error は標準入力からメールを読みこみ、 それを解析し、Mail::Message オブジェクトの鎖を作ります。 そして Mail::Bounce クラスがエラー内容の解析をします。 Mail::Bounce は、エラーメールについて 「どの MTA が生成したものか?」 「エラーを引き起こしたメールアドレス」 「エラーの理由」 を分析します。 解析結果は $error_mail_analyzer_cache_dir ディレクトリに格納されます。 一定時間以上経過すると、 $error_mail_analyzer_function がキャッシュのデータを解析し、 あるメールアドレスが存在しないように思えるか否か?を判定します。 その結果、消すべきだと判断されると、削除されます。 「一定時間」 と 「消すべきか?という判断」 この二つが主なチューニングパラメータになります。 エラー判定のアルゴリズム $error_mail_analyzer_function_select_list にある関数名が利用し得るアルゴリズムです。 デフォルトでは simple_count と histgram という2つのアルゴリズムが用意されており、 histgram がデフォルトです。 アルゴリズム: simple_count 単純にエラーが返ってきたメールの総数で「削除するか否か」の決断を判定します。 単純にエラー数なので、 ”たまたま”受信者が設定を少しの間だけ間違えていて、 ”たまたま”その日の流量が多い場合、 その受信者は 「削除対象」 とみなされることになります。 そういった場合にも、ようしゃなく削除してしまうのが、この方法の問題点です。 アルゴリズム: histgram エラーが連続してN日続いた時にかぎり削除を行ないます。 デフォルトでは 14 日(つまり二週)のあいだ連続してエラーの場合に、 はじめてアドレスの削除が行なわれます。 デメリット: 少なくとも一日一通は流量がないと、このアルゴリズムは動作しません。 メリット: ちょっと間違えただけの受信者が削除されることはありません。 現在のデフォルトは、このアルゴリズムです。 注意: 当然のことながら、流量が一日一通に満たないような、 まったりとしたMLでは、このアルゴリズムは動作しません:-) データのキャッシュ 各エラーメール(らしきもの)の解析結果は $error_mail_analyzer_cache_dir ディレクトリに格納されます。 現在、キャッシュの入出力には Tie::JournaledDir クラスを使っています。 正確には FML::Error::Cache というアダプタ層が Tie::JournaledDir の直前に位置し、 FML::Error::Cache 経由で Tie::JournaledDir への IO を行ないます。 すべての IO は、FML::Error::Cache が提供する primitive なメソッドを通じてのみ行なわなければなりません。 エラーメッセージをフォワードする $maintainer_recipient_maps を使うと、エラーメッセージの転送先を指定することができます。 デフォルトは「未定義」で、転送は行なわれません。 つまり &fml8; がエラーメールのログを残すだけです(安全ですので推奨)。 フォワードする設定をした場合は?というと、 単にエラーメールのフォワーディングが行なわれるだけです。 エラーメール( message/rfc822 )を一通だけ含む無味乾燥な mime/multipart がMLの管理者へ送信されます。 そのうち、 「ヘッダ情報 + そのエラーメールのアドレスの分析レポート」 など、もう少し付加的な情報もつけるべきでしょうか (と考えつつ、未実装のままです)? リファレンス: fml-devel ML 451 あたりを参照。