Hallo Nicola,
warum es mir bei den Vorschlägen ging, habe ich scheinbar noch nicht
ganz rüberbekommen. Also versuche ich es nochmal, mich verständlicher
auszudrücken.
Nicola Tiling schrieb:
> An dieser Stelle soll nur der header
> erweitert werden und das Subjekt verändert, wenn der Spam Score den
> Wert "$acl_m4" überschreitet. Das kann ich ja aber erst NACH dem check
> im vorherigen Absschnitt zu fassen bekommen.
In meinen Auszügen aus der Konfig sollte genau dies rauskommen. Erstmal
kommt ein "warn"-Block, wo das Spam-Scoring durchgeführt wird, mit einer
Bedingung, bei welchen Mails dies zu geschehen hat.
Danach kommen 1 bis x "warn"- oder "deny"-Blöcke, wo das Ergebnis
verarbeitet wird. Meine Erfahrung ist, dass ich die gleichen
Bedingungen, die ich bei Scoring-Block verwendet habe, auch bei den
Folgeblöcken verwenden muß, plus zusätzliche, um die weiteren Aktionen
zu steuern. Zum Beispiel, Header-Elemente hinzufügen. Sonst wird eine
Mail nicht mit einem Score versehen (wegen whitelist zum Beispiel), das
fehlende Ergebnis führt aber dazu, dass trotzdem die Mail mit Header
versehen wird.
>
> Ich habe jetzt einfach mal den spamcheck an der Stelle rausgenommen.
> Außerdem habe ich die "$acl_m4 > 0" zugefügt, sodass, wenn acl_m4 leer
> ist, die Bedingungen insgesamt auch nicht erfüllt sein soll
>
Ich glaube, dass "$acl_m4 > 0" noch nicht ganz ausreichend ist. Entweder
sollte man im "warn"-Block, der gegebenenfalls die Header modifizieren
soll, die kompletten "condition"-Elemente aus dem Scoring-"warn"
wiederholen, oder eine andere Kennzeichnung benutzen, die sicherstellt,
dass die Mail wirklich mit einem Scoring versehen worden ist. Meiner
Meinung reicht "{>{$spam_score_int}{0}}" nicht aus, weil dieser Wert
gegebenenfalls undefiniert ist. Konkret zum Beispiel für den zweiten Block:
> warn condition = ${if < {$message_size}{500k}{1}{0}}
> condition = ${if and { {eq{$header_X-SA-Run:}{Yes}} \
> {!eq {${lookup pgsql{WHITE_FROM}}}
> {1}} \
> {!eq {${lookup pgsql{WHITE_SUBJ}}}
> {1}} \
> } {yes}{no}}
> condition = ${if and{ {>{$spam_score_int}{0}} \
> {>{$acl_m4}{0}} \
> {>{$spam_score_int}{$acl_m4}} \
> } {1}{0}}
> 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
Die Duplizierung der lookups ist durch das Caching der Ergebnisse
praktisch ohne nennenswerten Auswand. Innerhalb der ACLs sind mehrere
"condition"-Elemente erlaubt, sie werden "und" verknüpft (leider gilt
dies nicht für Router :-((
Alternativ setzt man im Scoring-Block eine weitere Variable mit einem
Merker (Bedeutung: "für diese Mail ist ein Scoring gelaufen") und fragt
sie dann im folgenden "warn" ab.
Ich hoffe, es ist klarer geworden, was ich meinte.
Gruß -vol