At 12:36 PM 1/29/2004, Fred Felgenhauer wrote:
Here is my workaround. I am doing stream_by recipient and score
USER_IN_ALL_SPAM_TO set to 0 (or else
other recipients of same e-mail get message tagged as not spam)

How costly is reading the local.cf for each recipient?

Less than running SA in the first place, I expect, but there are faster ways to do this.


What I do is create a hash table at filter initialization, then check whether an entry exists for each recipient. It checks each recipient in filter_begin, and if any values are found it calls stream_by_recipient. That way, when it gets to filter_end and the values are actually important, it knows there's only one recipient - plus it doesn't split up and resend the message if it isn't necessary.

So something like this early on (outside of any subroutines):

%spam_fan = {
        '[EMAIL PROTECTED]' => 1,
        '[EMAIL PROTECTED]' => 1
};

Then something like:

sub all_spam_to($) {
        my $rec = lc($_[0});
        $rec =~ tr/<>//d;
        return exists($spam_fan{$rec});
}

sub all_spam_to_exists() {
        foreach my $rec (@Recipients) {
                return 1 if ( all_spam_to($rec) );
        }
        return 0;
}


- Then all_spam_to_exists early in filter_begin to decide whether to stream the message, and call all_spam_to in filter_end to decide whether to run SpamAssassin.


Then you can remove all_spam_to from local.cf entirely, since it doesn't do what you want in the first place.

Note: This is untested code - what we use is more complicated, so I've tried to simplify it, but there may be typos.


Kelson Vibber
SpeedGate Communications <www.speed.net>



_______________________________________________ Visit http://www.mimedefang.org and http://www.canit.ca MIMEDefang mailing list [EMAIL PROTECTED] http://lists.roaringpenguin.com/mailman/listinfo/mimedefang

Reply via email to