[PREVIOUS CHAPTER] [NEXT CHAPTER]

2 examples

reject null Message-Id: reject null Message-Id: &DEFINE_FIELD_PAT_TO_REJECT('message-id', '^\s*$'); 2.2 reject Subject: with FREE, SEX, ADULT, XXX.

    	reject Subject: with FREE, SEX, ADULT, XXX.
    	(but this config ignores "free software" content ?;-).

    	&DEFINE_FIELD_PAT_TO_REJECT('subject', 'FREE|SEX|ADULT|XXX');
    	&DEFINE_FIELD_PAT_TO_REJECT('subject', '/FREE|SEX|ADULT|XXX/');
    	&DEFINE_FIELD_PAT_TO_REJECT('from', 'ADULT');

    2.3	reject Subject: with FREE, SEX, ADULT, XXX (case insensitive).

    	reject Subject: with FREE, SEX, ADULT, XXX (case insensitive).

    	&DEFINE_FIELD_PAT_TO_REJECT('subject', '/free|sex|adult|xxx/i');

    2.4	reject if received: contains spam.co.jp

    $DISTRIBUTE_FILTER_HOOK = q#
        if ($e{'h:received:'} =~ /from spam.co.jp/) {
    	return 'from a host in spam blacklist';
        }
    #;

    2.5	reject if the mail body contains http-equiv=3DContent-Type

    $DISTRIBUTE_FILTER_HOOK = q#
        if ($e{'Body'} =~ /http-equiv=3DContent-Type/) {
    	return 'mail with appended HTML documents';
        }
    #;

    2.6	reject if the domain of From: conflicts Message-ID:

    $DISTRIBUTE_FILTER_HOOK = q#
       local($domain) = (split(/@/, $From_address))[1];
       if ($e{'h:message-id:'} !~ /$domain/i) {
    	return 'Message-Id conflicts your From: address';
       }
    #;

    2.7	aggregate the previous 3 rules

    Example:
    	* reject if a Received: line has "from spam.co.jp".
    	* reject if http-equiv=3DContent-Type exists in the body.
    	* reject $From_address conflicts with Message-Id:'s domain.

    $DISTRIBUTE_FILTER_HOOK = q#
        if ($e{'h:received:'} =~ /from spam.co.jp/) {
    	return 'from a host in spam blacklist';
        }

        if ($e{'Body'} =~ /http-equiv=3DContent-Type/) {
    	return 'mail with appended HTML documents';
        }

       local($domain) = (split(/@/, $From_address))[1];
       if ($e{'h:message-id:'} !~ /$domain/i) {
    	return 'Message-Id conflicts your From: address';
       }

    #;

    2.8	rule combined with sendmail PICKY_HELO_CHECK

    Example 2: When you configure PICKY_HELO_CHECK is on in config.h of
    sendmail, reject mail when it has X-Authentication-Warning by
    PICKY_HELO_CHECK. However this filter does not work well
    since virtual domain users matches them even if they are not spammers;D

        # PICKY_HELO_CHECK
        if ($e{'h:x-authentication-warning:'} !~ /Host \S+ claimed to be \S+/) {
    	$r = "Your SMTP session or your host config is invalid";
        }

    2.9	size limit for the mail header

    fml checks the size of the whole mail not distinct each header and
    body.

    2.10	To: or Cc: should have $MAIL_LIST !

    fml-support: 06389
    fml-support: 07286

    If To: or Cc: have not $MAIL_LIST, it is a spam !

    $USE_DISTRIBUTE_FILTER = 1;
    $DISTRIBUTE_FILTER_HOOK = q#
        if (($e{'h:to:'} !~ /$MAIL_LIST/i) && ($e{'h:cc:'} !~ /$MAIL_LIST/i)){
            return 'Not addressed to mailing list';
        }
    #;

    2.11	hook without using EnvelopeFilter

    # check attatchment of VB script and others :-)
    $START_HOOK .= q#
        if ($Envelope{'Body'} =~ /Content.*\.(vbs|js|jse|exe)/i ||
    	my($savefile) = "$FP_TMP_DIR/badarticle.$PCurrentTime";
    	if (open(SAVE, "> $savefile")) {
    	    print SAVE $Envelope{'Header'};
    	    print SAVE "\n";
    	    print SAVE $Envelope{'Body'};
    	    close(SAVE);
    	    $Envelope{'Body'}  = 'WARNING: incoming mail is ignored ';
    	    $Envelope{'Body'} .= 'since it may be with virus.';
    	    $Envelope{'Body'} .= "\n\n";
    	    $Envelope{'Body'} .= "This article is saved in\n";
    	    $Envelope{'Body'} .= $savefile;
    	    $Envelope{'Body'} .= "\n\n";
    	    $Envelope{'Body'} .= "-- $MAIL_LIST maintainer\n";
    	}
    	else {
    	    &Log("system error: pass this article through");
    	}
        }
    #;

    2.12	Duplicated Message-ID for mails from Notes

    It is impossible to solve this. Fix your MTA.

    2.13	Reject Mails From Specific Domains

    Before the main routine works, fml.pl can check and reject mails from
    specific domains in $REJECT_ADDR_LIST ($DIR/spamlist in default).
    Please write e.g.

       \S+@spam.org (reject spammers?, mails from spam.org)
       manager@\S+  (reject not personal addresses)

    fml adjusts $REJECT_ADDR for rejection irrespective of this file.

    2.14	ISP enforce to append a signature to your mail

    Such an ISP is terrible since it implies YOU HAVE NO SECRET, someone
    can rewrite your mail.

    To cut off the last signature.

    $SMTP_OPEN_HOOK = q#
    	local($uja);
    	for (split(/\n/, $e{'Body'})) {
    	   next if /=+/ .. /\-+/;
    	   $uja .= "$_\n";
    	}

    	$e{'Body'} = $uja;
    #;

[PREVIOUS CHAPTER] [NEXT CHAPTER]