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