[PREVIOUS CHAPTER] [______TOC_______]

3 いろいろなサイズの制限

    3.1	投稿メールのサイズの制限

    あまり大きいメールを送られてもサーバもメンバーの端末でも負荷が高くなる
    だけです。ＭＬサーバーが受けとる時に切り捨てます。コマンド、投稿を問わ
    ずチェックされます。デフォールトは制限なしで、サイズは byte 単位で

    		$INCOMING_MAIL_SIZE_LIMIT

    で指定します。なお0は無限大を意味します(デフォールト)。

    		$NOTIFY_MAIL_SIZE_OVERFLOW (default 1)

    が設定されていれば送り主に fml が拒否した旨をメールで返します。
    経験的には知らせないと何度も非常に大きいメールを送ってくるので
    非常に迷惑です。

    message/partial はばらばらにされて送られてくる分の合計のサイズを推定し
    てその値と $INCOMING_MAIL_SIZE_LIMIT を比較します。
    (最後の一通が突破する可能性はある)

    		$ANNOUNCE_MAIL_SIZE_OVERFLOW (default 0)

    を 1 に定義すると、ＭＬに「でっかいメールをＭＬへ投げた人がいる」とさ
    らしものにする:)。＃本人に警告すれば十分だとおもうんだが…

    3.2	ＭＬのメンバー数制限(自動登録の時)

    	$MAX_MEMBER_LIMIT

    でメンバーの最大数を制限する。認証するメンバーのリストではなく、配送の
    リストをチェックしています。もっとも自動登録の時はほとんど同じことですが

    3.3	HOOKの例:ある行数を越えるメールは廃棄する設定

    We discard mail with over 1000 lines. Today please use
    $INCOMING_MAIL_SIZE_LIMIT for incoming mail size upper limit.
    3.1

    $START_HOOK = q#
        if ($Envelope{'nlines'} > 1000) {
    	&Warn("Discarded on the behalf of too Large Mail", &WholeMail);
    	$DO_NOTHING = 1;
        }
    #;

    3.4	$START_HOOK でＭＬメンバーの人数制限をする

    ファイル $LIMIT_OVER_FILE にごめんなさいの文章を書いておく。
    Ref: START_HOOK => ../hooks 3.1

    $START_HOOK = q%;

    $MAX_MEMBER = 100;

    $LIMIT_OVER_FILE = "$DIR/limit.over";

    sub WC
    {
        local($f) = @_;
        local($lines) = 0;

        open(TMP, $f) || return 0;
        while (<TMP>) {
    	next if /^\#/;
            $lines++;
        }
        close(TMP);

        $lines;
    }

    if (&WC($ACTIVE_LIST) > $MAX_MEMBER) {
        &SendFile($From_address,
    	      "Sorry, the mailing list member exceeds the limit $ML_FN",
    	      $LIMIT_OVER_FILE);
        $DO_NOTHING = 1;
    }

    %;