[PREVIOUS CHAPTER] [______TOC_______]
3 いろいろなサイズの制限

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


あまり大きいメールを送られてもサーバもメンバーの端末でも負荷が高くなる
だけです。MLサーバーが受けとる時に切り捨てます。コマンド、投稿を問わ
ずチェックされます。デフォールトは制限なしで、サイズは 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 に定義すると、MLに「でっかいメールをMLへ投げた人がいる」とさ
らしものにする:)。#本人に警告すれば十分だとおもうんだが…


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

	$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 でMLメンバーの人数制限をする

ファイル $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;
}


%;