Re: [exim] message_size and SpamAssassin

Kezdőlap
Üzenet törlése
Válasz az üzenetre
Szerző: Marc Sherman
Dátum:  
Címzett: exim-users
Tárgy: Re: [exim] message_size and SpamAssassin
Andreas Pettersson wrote:
> Hi.
> I have some difficulties with large mails and spam scanning.
> I'm setting several headers depending on the score, like this

[snip]
> but because there are warns that don't have the $message_size condition,
> SpamAssassin gets called for mails larger than 500K (it just don't set
> the X-Spam-Flag header). One obvius solution is to add a $message_size
> condition to each and every warn, but is there any 'nicer' way to solve
> this?


Once the spam condition has been run, you don't need to re-run it in
subsequent acl stanzas -- the variables are already set by the first
run. So you can do this:

   warn  message = X-Spam-Flag: YES
    condition = ${if < {$message_size}{500K}}
         spam = nobody


   warn  message = X-Spam-Q: 1
    condition = ${if def:spam_score_int}
         condition = ${if >= {$spam_score_int}{50}{1}{0}}
         condition = ${if < {$spam_score_int}{100}{1}{0}}


   warn  message = X-Spam-Q: 2
    condition = ${if def:spam_score_int}
         condition = ${if >= {$spam_score_int}{100}{1}{0}}
         condition = ${if < {$spam_score_int}{150}{1}{0}}


This has the added benefit of not re-running spamassassin for each
stanza when spamassassin fails (due to a pathalogical message) if you
decide to use defer_ok.

If your spam checks are at the end of the ACL (or pulled out into a
called sub-acl), you can make it even simpler by just accepting
over-sized messages up front:

accept condition = ${if >= {$message_size}{500K}}

   warn  message = X-Spam-Flag: YES
         spam = nobody


   warn  message = X-Spam-Q: 1
         condition = ${if >= {$spam_score_int}{50}{1}{0}}
         condition = ${if < {$spam_score_int}{100}{1}{0}}


   warn  message = X-Spam-Q: 2
         condition = ${if >= {$spam_score_int}{100}{1}{0}}
         condition = ${if < {$spam_score_int}{150}{1}{0}}


- Marc