spamassassin 2.55 + confixx 3.1.2

Hm ok das ist eine gute idee.
Ich kann nur PHP , kann ich das so ohne weiteres in ein Shell Scrip reinbasteln?
 
Du sollst gleich alles in ein PHP-Script schreiben. Ganz ohne Shell.
Aufgerufen wird das dann per "php mein-script.php". (Vorrausgesetzt Du hast php auch als cli-Version installiert. Ansonsten einfach nachholen.)
Das Script läuft dann ausserhalb von irgend welchen Webservern oder Beschränkungen. :)

huschi.
 
jo das is mir schon klar, es geht auch endlich alles so wie ich es wollte.

ABER

die leuete die Confixx verbrochen haben oder besser die Datenbanktabelle für den Spam, die müssten meiner Meinung nach bestraft werden, da is ja absolute redundanz der daten vorhanden.

jedesmal trägt der idiod den usernamen mit ein wenn er ne neue mail einträgt.

Ich habe momentan noch keinen schimmer, wie ich da doppelte einträge verhindern kann.
 
Last edited by a moderator:
So liebe Leute ich melde mit Freuden ERFOLG!!!!!!!!!!! :)

Habe es jetzt hinbekommen, ich poste gleichmal meine Scripte.
Einige von euch werden jetzt bestimmt gleich sagen, warum hast du das nicht alles in PHP gemacht?

Dazu sage ich einfach, ich war einfach zu faul das shellscript (welches tadelos funktioniert) in php umzuschreiben :)

Wer die scripte nehmen möchte, muss vorher entweder die Pfade ab ändern oder folgende Pfade einfach anlegen.

Also bei mir befinden sich die e-Mailordner der User in /home/mail
die Namen der Ordner sind zum glück gleich die Usernamen.

Dann müsstet ihr noch 2 zusätzliche Ordner anlegen, wo dateien zwischengespeicchert werden.

zum einen mkdir /home/spam
und zum anderen mkdir /home/ham
wenn ihr das script unter rootrechten laufen lassen wollt, müssen keine bestimmten rechte vergeben werden.

So ich hoffe ich habe nix vergessen .

so als erstes hier das shellscript: /root/spam_learn.sh

Code:
#!/bin/sh

DBPATH=/var/spool/spamassassin/bayes

##############################################################################
#       SPAM
##############################################################################


SPAMFOLDER='Spam-lernen'

DOMAINS=/home/mail/*
for domain in $DOMAINS ; do
echo $domain > /tmp/user
INBOXES=$domain/$SPAMFOLDER

for inbox in $INBOXES ; do

if [ ! -f $inbox ]
then
cd $domain
touch $inbox
USER=`cat /tmp/user | grep web | cut -c12-50`
GRUPPE='poponly'
chown $USER:$GRUPPE $inbox
rm /tmp/user
fi

if [ -s $inbox ]
then
        cd $domain
        USER=`cat /tmp/user | grep web | cut -c12-50`
        GRUPPE='poponly'
                if [ -f /tmp/spam ]
                then
                rm /tmp/spam
                fi

        cat $inbox | grep From: | grep @ | sed 's/From://g' | sed 's/<//g' | sed 's/>//g' | sed 's/"//g' | awk '{print $3}' | grep @ > /tmp/spam
        cat $inbox | grep From: | grep @ | sed 's/From://g' | sed 's/<//g' | sed 's/>//g' | sed 's/"//g' |awk '{print $2}' | grep @ >> /tmp/spam
        touch /tmp/newlist; for i in $(cat /tmp/spam); do if [ $(grep -c $i /tmp/newlist) -eq 0 ]; then echo $i >> /tmp/newlist; fi; done; mv /tmp/newlist /home/spam/$USER
rm /tmp/spam
rm /tmp/user
fi

        #sa-learn --spam --no-sync $inbox
        #sa-learn --sync
done

done

if [ -f /tmp/user ]
then
rm /tmp/user
fi

##############################################################################
#       HAM
##############################################################################

HAMFOLDER='No-Spam-lernen'

DOMAINS1=/home/mail/*
for domain1 in $DOMAINS1 ; do

echo $domain1 > /tmp/user1

INBOXES1=$domain1/$HAMFOLDER

for inbox1 in $INBOXES1 ; do \

if [ ! -f $inbox1 ]
then
cd $domain1
touch $inbox1
USER1=`cat /tmp/user1 | grep web | cut -c12-50`
GRUPPE1='poponly'
chown $USER1:$GRUPPE1 $inbox1
rm /tmp/user1
fi
if [ -s $inbox1 ]
then
        cd $domain1
        USER1=`cat /tmp/user1 | grep web | cut -c12-50`
        GRUPPE1='poponly'
        rm /tmp/user1
               if [ -f /tmp/spam1 ]
                then
                rm /tmp/spam1
                fi

cat $inbox1 | grep From: | grep @ | sed 's/From://g' | sed 's/<//g' | sed 's/>//g' | sed 's/"//g' | awk '{print $3}' | grep @ > /tmp/spam1
cat $inbox1 | grep From: | grep @ | sed 's/From://g' | sed 's/<//g' | sed 's/>//g' | sed 's/"//g' |awk '{print $2}' | grep @ >> /tmp/spam1

touch /tmp/newlist1; for i in $(cat /tmp/spam1); do if [ $(grep -c $i /tmp/newlist1) -eq 0 ]; then echo $i >> /tmp/newlist1; fi; done; mv /tmp/newlist1 /home/ham/$USER1

        #sa-learn --ham --no-sync $inbox1
        #sa-learn --sync
fi
done


done

if [ -f /tmp/user1 ]
then
rm /tmp/user1
fi

So das hier is das zugehörige phpscript: /root/spam.php

PHP:
<?php
shell_exec('/root/spam_learn.sh');
?>
<?php
$db_user="******";
$db_pass="******"; 
$db_host="localhost";
$db_datenbank="confixx";                                                                                                          
$server_id="********";

#Datenbankverbindung

$db_connect = mysql_connect($db_host,$db_user,$db_pass) or die(mysql_error()); 
$db_select = mysql_select_db($db_datenbank,$db_connect) or die(mysql_error());

######################################################################



$DOMAINS="/home/spam/";
$handle = opendir($DOMAINS);

while ($user_name = readdir ($handle)) 
{
        
	if($user_name != "." AND $user_name != "..")
	{
	$avar = file("$DOMAINS$user_name");
	
			for($x=0;$x<count($avar);$x++)
			{
				$select ="SELECT * FROM spampref WHERE username='$user_name' AND value='$avar[$x]'";
				$ergebnis=mysql_query($select) or die('fehler:'.mysql_error());	
				$test=mysql_num_rows($ergebnis);
			
			if($test == 0 ) #Wenn kein Eintrag in der Datenbank mit dieser emailadresse vorhanden ist, Adresse in Blacklist eintragen
				{
				$insert ="INSERT INTO spampref (username,preference,value,server_id) VALUES ('$user_name','blacklist_from','$avar[$x]','$server_id')";
				mysql_query($insert) or die(mysql_error());
				}
			
			if($test != 0)	#Wenn ein Eintrag in der Datenbank mit dieser emailadresse vorhanden ist, testen ob in white oder Blackliste
				{
				$prefid=mysql_result($ergebnis,0, 'prefid');
				$update ="UPDATE spampref SET preference='blacklist_from' WHERE preference='whitelist_from' AND username='$user_name' AND prefid='$prefid' AND value='$avar[$x]'";
				mysql_query($update) or die (mysql_error());	
				}
			}#for ENDE ZEILE 30
		}#if ZEILE 26
		
	}#while ZEILE 23
?>
<?php
#HAM


$DOMAINS="/home/ham/";
$handle = opendir($DOMAINS);

while ($user_name = readdir ($handle)) 
{
        
	if($user_name != "." AND $user_name != "..")
	{
	$avar = file("$DOMAINS$user_name");
	
			for($x=0;$x<count($avar);$x++)
			{
				$select ="SELECT * FROM spampref WHERE username='$user_name' AND value ='$avar[$x]'";
				$ergebnis=mysql_query($select) or die('fehler:'.mysql_error());	
				$test=mysql_num_rows($ergebnis);
			
			if($test == 0 ) #Wenn kein Eintrag in der Datenbank mit dieser emailadresse vorhanden ist, Adresse in Whitelist eintragen
				{
				$insert ="INSERT INTO spampref (username,preference,value,server_id) VALUES ('$user_name','whitelist_from','$avar[$x]','$server_id')";
				mysql_query($insert) or die(mysql_error());
				}
			
			if($test != 0)	#Wenn ein Eintrag in der Datenbank mit dieser emailadresse vorhanden ist, update auf Whitelist
				{
				$prefid=mysql_result($ergebnis,0, 'prefid');
				$update ="UPDATE spampref SET preference='whitelist_from' WHERE preference='blacklist_from' AND username='$user_name' AND prefid='$prefid' AND value='$avar[$x]'";
				mysql_query($update) or die (mysql_error());	
				}
			}#for ENDE ZEILE 67
		}#if ZEILE 63
	
	}#while ZEILE 60
shell_exec('/root/delete.sh');

?>

So und zu guter letzt noch die Datei um etwas aufzu räumen, sind zwar blos 2 zeilen aber immer wenn ich die im PHP mit ausgeführt habe, hat er den inhalt der Ordner zwar gelöscht aber er hat auch immer versucht . und .. mit zu löschen und da ich keine idee hatte wie ich die Warnungen weg bekomme, habe ich die zwei befehle kurzer hand einfach ausgelagert :)

so hier is der Code für: /root/delete.sh

Code:
#!/bin/sh
rm /home/ham/*
rm /home/spam/*

So ich möchte nur noch mal kurz darauf hinweisen, das ich kein Profi Programmierer bin, wenn ihr Verbesserungsvorschläge für mich habt, würde ich mich sehr darüber freuen.
Ich denke manchmal noch um 7 Ecken :)

So ich hoffe ich konnte euch hiermit eine neue Möglichkeit aufzeigen, wie man E-MAIL Adressen einfach und schnell in eine Black und WhiteListe reinbekommt.

Über Sinn und Unsinn kann man sich ja bekanntlich streiten.
Das schöne ist bei dieser lösung die Dynamik.
Wenn ihr das Script ausführt werden automatisch zwei neue Ordner im E-Mailordner eurer Kunden angelegt.
Einmal Spam-lernen: Hier kann man alle Spam mails reinschieben, diese werden dann automatisch in die Datenbank übernommen.
Und der zweite No-Spam-lernen: Dieser ist für alle Ham mails gedacht auch diese werden automatisch in die Datenbank geschrieben.
Mann kann über die Webmailoberfläche von Confixx euch einzelne E-Mails von Black zu White oder umgekehrt Updaten.
Wenn ihr eine Spam mail bekommt, die in der Blacklist schon drin ist, braucht ihr diese nur in den Ordner No-Spam-lernen verschieben und warten bis das script automatisch über cron ausgeführt wird. Danach werden die Mails per Mysql Update in der Datenbank geändert.


So bei Fragen oder Anregungen, bitte hier einfach Posten, das alle was dafon haben, bitte keine PM schreiben.

Wenn ihr noch ein paar ideen habt was man noch so mit reinbasteln kann, auch einfach hier posten.

Grüße s3993

PS: und nochmal einen RIESSSSEN Dank an alle die mir geholfen haben.
 
So ich muss doch leider noch mal was fragen, ist das normal, das der bei dem befehl

Code:
sa-learn --spam --no-sync $inbox
sa-learn --sync

so lange braucht bis der fertig ist (dauert etwa 30 - 40 sek), auch wenn da nur 2 oder 3 Mails drin sind.

In $inbox steht die mailbox drin, wo er lernen soll. (/home/mail/webxpx/Spam-lernen)

Oder muss ich da noch was mit angeben, das das besser oder schnelle läuft?
wie kann ich eigendlich testen ob er das was er mit sa-learn einträgt auch verwendet oder ob er es wirklich eingetragen hat ?

Ich hoffe meine Frage is richtig rübergekommen.

Gruß s3993
 
Last edited by a moderator:
Back
Top