deenfritptrues

Hier ein PHP Skript, das ich verwende um die header_checks und body_checks Datei von Postfix zu editieren.

Ist handlicher als bei ejder Änderung per SSH anmelden zu müssen.

Ein Cronjob kopiert die Dateien und macht ein reload von Postfix.

 

<?php
if($_POST['Submit']){
$open = fopen("header_checks","w+");
$text = $_POST['update'];
fwrite($open, $text);
fclose($open);
$open2 = fopen("body_checks","w+");
$text = $_POST['update2'];
fwrite($open2, $text);
fclose($open2);
$open3 = fopen("mime_header_checks.regexp","w+");
$text = $_POST['update3'];
fwrite($open3, $text);
fclose($open3);
echo "Files aktualisert";
echo "<meta http-equiv=\"refresh\" content=\"3;url=/path\" />";
}else{
echo "<h2>header_checks</h2>";
$fileh = file("header_checks");
echo "<form action=\"".$PHP_SELF."\" method=\"post\">";
echo "<textarea Name=\"update\" cols=\"80\" rows=\"20\">";
foreach($fileh as $text) {
echo $text;
}
echo "</textarea>";
echo "<h2>body_checks</h2>";
$fileb = file("body_checks");
echo "<form action=\"".$PHP_SELF."\" method=\"post\">";
echo "<textarea Name=\"update2\" cols=\"80\" rows=\"20\">";
foreach($fileb as $text) {
echo $text;
}
echo "</textarea>";
echo "<h2>mime_header_checks</h2>";
$filem = file("mime_header_checks.regexp");
echo "<form action=\"".$PHP_SELF."\" method=\"post\">";
echo "<textarea Name=\"update3\" cols=\"80\" rows=\"20\">";
foreach($filem as $text) {
echo $text;
}
echo "</textarea>";
echo "<br />";
echo "<input name=\"Submit\" type=\"submit\" value=\"Update\" />";
echo "</form>";
}
?>

 

Bitte /path im Code mit dem Pfad ersetzen, wohin der redirekt nach dem Speichern gehen soll !
Und natürlich auch die Dateinamen etc.

 

 

Wer sich mehr in PHP einlesen möchte, hier eine Empfehlung.

PHP und MySQL: für Einsteiger: Dynamische Webseiten durch PHP 7, SQL und Objektorientierte Programmierung

 

Dieses kleine Skript führe ich gelegentlich aus, um neue Betreff Filterregeln in Postfix hinzuzufügen, um es nicht manuell machen zu müssen.

 

Vorweg, ich benutze das Maildir Format. Das bedeutet, jedes Mail wird als einzelne Datei am Server abgelegt.

 

Das Skript sucht zuerst nach dem Begriff "*SPAM" im Betreff.
Das sind die Mails die von Spamassassin (Amavis) schon als SPAM markiert wurden.
Diese kommen oft immer wieder oder auch mehrmals pro Tag und damit sie garnicht erst angenommen werden, möchte ich diese schon in Postfix filtern.

 

Das sed Kommando ändert das t: von "Subject:" in t~ um, damit das anschließende awk die ~ als Trennzeichen nutzen kann und es setzt ein \ (Backslash) for bestimmte Sonderzeichen, die Postfix sonst anders interpretieren würde.

Der Grund ist, das in Betreffs der Doppelpunkt öfter verwendet werden als die Welle und ich möglichst den ganzen Betreff in die header_checks Datei eintragen möchte.

 

Das cut entfernt das ***SPAM*** aus dem Betreff.

Die grep -vw Einträge nehmen Betreff Texte aus, die man nicht filtern möchte.
Das grep -ev entfernt leere Zeilen.

Und das sort -u entfernt Duplikate.

 

Es prüft auch vorher, ob der Eintrag, den es eintragen soll, schon vorhanden ist (RC=.. if $?)

 

#!/bin/bash
grep -r "\*SPAM" /var/mail/vmail/domain.org/username/.Junk/* | sed -e 's/t\:/t\~/g; s/\?/\\\?/g; s/\ß/\\\ß/g; s/\!/\\\!/g; s/\$/\\\$/g; s/\%/\\\%/g; s/\//\\\//g; s/\&/\\\&/g;' -e 's/\./\\\./g;' -e 's/\=/\\\=/g;' -e 's/\"/\\\"/g;' -e 's/\-/\\\-/g;' -e 's/\#/\\\#/g;' -e 's/[(]/\\[(]/g;' -e 's/[)]/\\[)]/g;' -e 's/[{]/\\[{}/g;' -e 's/[}]/\\[}]/g;' -e 's/[[]/\\[[]/g;' -e 's/[[]/\\[]]/g;' -e 's/\*/\\\*/g;' | awk -F~ '{print $2}' | cut -c19- | grep -vw Re | grep -vw AW | grep -vw "Guten Morgen" | grep -ve '^$' | sort -u > /tmp/headerjunk
while read a; do RC=$(grep -Fw "/^Subject:.*$a.*/ REJECT SPAM Rule $a" /etc/postfix/header_checks); if [ $? != 0 ]; then echo /^Subject:.*$a.*/ REJECT SPAM Rule $a >> /etc/postfix/header_checks; fi; done < /tmp/headerjunk
rm /tmp/headerjunk
postfix reload

In das header_checks File kommt dann ein Eintrag der zum Beispiel so aussieht:

/^Subject:.*Our Prices.*/ REJECT SPAM Rule Our Prices

 

Der Absender bekommt damit eine Antwort das seine Mail abgelehnt wurde mit dem Text "SPAM Rule Our Prices".

Wenn es sich dabei um keine SPAM handelt, kann der Sender den Betreff ändern oder sie kontaktieren und sie können den Eintrag aus der header_checks entfernen.

Oder den Absender in eine Whitelist eintragen.

 

Man muss nicht den Junk Ordner dafür hernehmen.
Sie können auch einen eigenen Ordner für Mails dessen Betreff sie filtern möchten anlegen, diese Mails dort ablegen und das Skript darauf laufen lassen.

 

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.