Hallo Nicola,

anhand der beiden unterschiedlichen Beispiele und des gesamten ACL 
Abschnitts kann man einiges sehen. Und die Frage und der Hinweis von 
Heiko sind genau die richtigen.

Nicola Tiling schrieb:
>    warn  condition      = ${if and { {eq{$header_X-SA-Run:}{Yes}} \
>                                      {!eq {${lookup pgsql{WHITE_FROM}}} 
> {1}} \
>                                      {!eq {${lookup pgsql{WHITE_SUBJ}}} 
> {1}} \
>                                    } {yes}{no}}
>          spam           = maildeliver:true/defer_ok
>          message        = X-Spam_score: $spam_score\n

Die Mail __OHNE__ Markierung ist durch diesen Abschnitt gelaufen, was 
daran zu erkennen ist, dass der Header "X-Spam_score: -4.4" gesetzt 
wird. Die Mail __MIT__ Markierung durchläuft diesen Abschnitt nicht, was 
man am fehlenden Header "X-Spam_score" sehen kann. Wahrscheinlich ist 
eine der Bedingungen für diese Mail nicht erfüllt.

>    #spam_score_int darf nicht NULL sein!
>    warn  condition      = ${if and{ {>{$spam_score_int}{0}} \
>                                     {>{$spam_score_int}{$acl_m4}} \
>                                   } {1}{0}}
>          spam           = maildeliver:true/defer_ok
>          message        = X-Spam-Flag: YES\n\
>                           X-Spam_score_int: $spam_score_int\n\
>                           X-Spam_value: $acl_m4\n\
>                           X-Spam_bar: $spam_bar\n\
>                           X-Spam_subject: *****SPAM*****($spam_score)  
> $h_subject:\n\
>                           X-Spam_report: $spam_report\n

Duch diesen Abschnitt ist die Mail __OHNE__ Markierung nicht gelaufen. 
Die Variable $spam_score_int enthielt den Wert "-44" und der erfüllt 
nicht die Bedingung, größer als "50" zu sein.

Die Mail __MIT__ Markierung ist durch diesen Abschnitt gelaufen. 
$spam_score_int enthält wahrscheinlich während der Abprüfung der 
Bedingung einen undefinierten Wert (siehe Hinweis von Heiko), weil diese 
Mail nicht durch den oberen "warn"-Abschnitt gelaufen ist. Egal, wie das 
nach der Bedingung durchgeführte Spam-Scoring ausgeht, werden die Header 
gesetzt und die Mail markiert (auch bei negativen Score). Gemeinerweise 
enthalten die Headerzeilen den richtigen Spam-Score, der aber erst nach 
der Abprüfung von "{>{$spam_score_int}{$acl_m4}}" ermittelt wurde.

In meiner Konfig habe ich genau einen Aufruf des Spam-Scorers (etwas 
gekürzt):

   warn hosts = ! +relay_hosts : ! +no_spam_hosts
        ! senders = /opt/csw/etc/exim/sender_no_spam
        condition = ${if < {$message_size}{500k}{1}{0}}
        condition = ${if or { \
                              {eq {${acl_m0}}{score}} \
                              {eq {${acl_m0}}{deny5}} \
                            } \
                         {true} {false} }
        spam = nobody:true
        message = X-Spam-Score: ($spam_bar) $spam_score\n\
                  X-Spam-Report: $spam_report
        log_message = spam-score ($spam_bar) $spam_score \
                      from=$sender_address \
                      to=$recipients
        set acl_m1 = $spam_score_int
        set acl_m2 = ($spam_bar) $spam_score
        set acl_m3 = $spam_report

In den folgenden ACL Abschnitten werden dann nur noch die ACL-Variablen 
benutzt. Die Bedingungen sind aber immer die gleichen, damit ich nicht 
eine nicht gescorte Mail bearbeite. Zum Beispiel eine "deny" ACL (wieder 
etwas gekürzt):

   deny hosts = ! +relay_hosts : ! +no_spam_hosts
        ! senders = /opt/csw/etc/exim/sender_no_spam
        condition = ${if and { \
                               {< {$message_size}{500k}} \
                               {eq {${acl_m0}}{deny5}} \
                               {>= {${acl_m1}}{50}} \
                             } \
                         {true} {false} }

Gruß -vol

_______________________________________________
Exim-users-de mailing list
[email protected]
http://lists.exim.org/mailman/listinfo/exim-users-de

Antwort per Email an