●フィルタ利用について "$USE_DISTRIBUTE_FILTER =1;" を設定することで、"%e" あるいは "%Envelope" により、メールの各部位にアクセス可能になります。 reject する場合は reject の理由を含む文を return し、そうでなければ何も 返さないようにします。("return 0;" のようにします) ●その一 管理者のみに拒否通知を送信する場合。 $USE_DISTRIBUTE_FILTER = 1; $DISTRIBUTE_FILTER_HOOK = q# if ($e{'h:content-type:'} !~ /text\/plain/oi){ return 'Not text/plain'; } if ($e{'h:to:'} !~ /$MAIL_LIST/oi and $e{'h:cc:'} !~ /$MAIL_LIST/oi){ return 'REJECT: Recipient(TO/CC) is illegal'; } #; ●そのニ 管理者と送信者に拒否通知を出さない場合。 $USE_DISTRIBUTE_FILTER = 1; $DISTRIBUTE_FILTER_HOOK = q# if ($e{'h:content-type:'} !~ /text\/plain/oi){ &Log("REJECT: Not text/plain"); $DO_NOTHING=1; return 0; } if ($e{'h:to:'} !~ /$MAIL_LIST/oi and $e{'h:cc:'} !~ /$MAIL_LIST/oi){ &Log("REJECT: Recipient(TO/CC) is illegal"); $DO_NOTHING = 1; return 0; } #; ●そのニ+α(HTMLメールはOK) $USE_DISTRIBUTE_FILTER = 1; $DISTRIBUTE_FILTER_HOOK = q# if ($e{'h:content-type:'} !~ /text\/plain|text\/html|multipart\/alternative/oi){ &Log("REJECT: Not text/plain"); $DO_NOTHING=1; return 0; } if ($e{'h:to:'} !~ /$MAIL_LIST/oi and $e{'h:cc:'} !~ /$MAIL_LIST/oi){ &Log("REJECT: Recipient(TO/CC) is illegal"); $DO_NOTHING = 1; return 0; } #; ●その三 拒否通知の内容や通知の有無をカスタマイズする場合。 ・管理者と送信者への拒否通知メールの有無を設定できる。 $rcpt_notify = 1; # 送信者への通知(0:しない, 1:する) $admin_notify = 1; # 管理者への通知(0:しない, 1:する) ・オリジナルの拒否通知メールを送信できる。 「admin put sorry_plaintext」コマンドで、拒否通知メールの雛形を設置 することで、利用できます。ファイル名は、$reject_msg_file の値を変え ることで任意に設定できます。 $USE_DISTRIBUTE_FILTER = 1; $DISTRIBUTE_FILTER_HOOK = q#; my $rcpt_notify = 1; my $admin_notify = 1; my $reject_msg_file = "$DIR/sorry_plaintext"; if ($Envelope{'h:content-type:'} !~ m{text/plain}oi ) { if ($rcpt_notify) { my $subject = '=?iso-2022-jp?B?TUwbJEIlKCVpITwhJ0hzJVclbCE8JXMlRiUtJTklSBsoQg==?='; my $body = &GetStr($reject_msg_file) . &ForwMail; &Sendmail( $From_address, $subject, $body); } if ($admin_notify) { my $subject = "REJECT: Not text/plain ($From_address)"; my $body = &WholeMail; &Warn($subject, $body); } &Log("REJECT: Not text/plain"); $DO_NOTHING = 1; return 0; } if ($e{'h:to:'} !~ /$MAIL_LIST/oi and $e{'h:cc:'} !~ /$MAIL_LIST/oi){ &Log("REJECT: Recipient(TO/CC) is illegal"); $DO_NOTHING = 1; return 0; } return 0; sub GetStr { my ($file) = @_; my $str; unless (-e $file) { $str = "This mailing list permits only text/plain message.\n" . "Please post text/plain message, again.\n"; } else { local($/, *TMP); undef $/; open(TMP, $file) or die "WARN: Can't open $file: $!\n"; $str = ; close(TMP); } return(&JSTR($str)); } #; ●その四 より簡単にコンテンツフィルタを定義する。 管理者と送信者に拒否通知を送信する場合。 &ADD_CONTENT_HANDLER('multipart/.*', '.*/.*', 'reject'); &ADD_CONTENT_HANDLER('text/plain', '.*/.*', 'allow'); &ADD_CONTENT_HANDLER('!MIME', '.*/.*', 'allow'); ●参考URL http://www.imasy.or.jp/public/info/fml/op/10.html http://www.fml.org/home/fukachan/fml/Japanese/hook_collection/