[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;
}
%;