Spam-Report für Confixx Benutzer und Spamassassin

Heute stellen wir euch ein Perl-Script vor, mit dem es möglich ist die E-Mail Postfächer von Confixx Benutzern auf neue Spam E-Mails zu prüfen und einen Report entsprechend zu versenden.

Vorraussetzungen für die Nutzung dieses Skriptes: Confixx, Dovecot, Spamassassin, RoundCube Webmail.

RoundCube

RoundCube greift also ganz normal die E-Mail Postfächer von Confixx zu. Die Benutzer können sich also einloggen. RoundCube ist so konfiguriert, dass es beim ersten Login die Standardordner „Gesendete“, „Papierkorb“, „Spam“ erstellt.

Spamassassin und Sieve-Regeln

In RoundCube gibt es die Möglichkeit (durch zwei Plugins) Spamassassin zu steuern und Sieve-Regeln anzulegen (Sieve-Regelen durch Dovecot).

Wir haben Spamassassin gesagt der Betreff einer als Spam erkannten E-Mail soll in „SPAMASSASSIN – Betreff“ umgeschrieben werden. Als Sieve-Regel haben wir festgelegt: „Lege alle E-Mails in den Ordner Spam, bei denen der Betreff SPAMASSASSIN beinhaltet“.

Dies funktioniert auch. Als Spam erkannte E-Mails werden nicht mehr ausgeliefert, sondern landen nur noch im Spam Ordner, welchen man natürlich mit RoundCube z.B. wöchentlich prüfen kann.

Der Report

Wir möchten uns nun aber nicht immer in RoundCube einloggen um zu schauen ob wir neue Spam E-Mails erhalten haben. Dafür gibt es nun das folgende Perl-Script.

Variablen und Daten müssen natürlich auch eure Gegebenheiten angepasst werden.

#!/usr/bin/perl
 
use DBI;
 
# Datenbankverbindung
$dbh = DBI->connect('dbi:mysql:confixx','USERNAME','PASSWORD');
 
# Mailbox Ordner
my $mailboxdir = '/home/pop/';
 
# Pfad zu sendmail / Variablendefinition
my $mailprog = '/usr/sbin/sendmail';
my $from     = 'spamreport@example.de';
my $name     = 'Spam-Reporter von Example';
my $subject  = 'Spam-Report';
 
 
 
#
# Confixx Postfaecher auslesen
#
$sql_getpops = "select account from pop3";
$sth_getpops = $dbh->prepare($sql_getpops);
$sth_getpops->execute;
while (@pops = $sth_getpops->fetchrow_array) {
	# Pruefen ob Ordner existiert
	if(-d $mailboxdir.$pops[0]."/Maildir/.Spam/new") {
	
		# Dateien auslesen
		chdir($mailboxdir.$pops[0]."/Maildir/.Spam/new");
		opendir(DIR,".");
		my @emails = readdir(DIR);
		closedir(DIR);
		my $i=0;
		foreach (@emails) { $i = $i + 1; }
		$i = $i -2;
		
		# Wenn es neue, nicht erhaltene SPAM Mails gibt...
		if($i != 0) {
			# E-Mail auslesen
			$sql_getemailident = "select email_ident from email_forward where pop3 = '$pops[0]' limit 1";
			$sth_getemailident = $dbh->prepare($sql_getemailident);
			$sth_getemailident->execute;
			@mailident = $sth_getemailident->fetchrow_array;
 
			$sql_getemail = "select prefix, domain from email where ident = '$mailident[0]' limit 1";
			$sth_getemail = $dbh->prepare($sql_getemail);
			$sth_getemail->execute;
			@email = $sth_getemail->fetchrow_array;
			$useremail = $email[0]."@".$email[1];
 
			# E-Mail versenden
			my $body     = 'Hallo,
			
Es gibt '.$i.' neue, ungelesene Spam E-Mails in deinem Postfach.
Bitte logge dich in Webmail ein um diese einzusehen.
			
Viele Grüße';
 
			&Send_Mail;
			sub Send_Mail 
			{
				open (MAIL, "|$mailprog $useremail");
				print MAIL ("To: $useremail <$useremail>\n");
				print MAIL ("From: $name <$from>\n");
				print MAIL ("Subject: $subject\n\n");
				print MAIL ("$body");
				close (MAIL);
			}
		}
	}
}

Das Script speichern wir nun auf unserem Server als „reportSpam.pl“ ab.

Cronjob

Für die Ausführung legen wir einen neuen Job in der Crontab an. In unserem Fall soll das Script Montags und Mittwochs um 10.00 Uhr ausgeführt werden.

0 10 * * 1,3 root /root/reportSpam.pl

Voila!

Bewerte diese Seite

 
 
 
 
 
 
 
Bewerten
 
 
 
 
 
 
0 Bewertungen
0 %
1
5
0
 

Veröffentlicht von

Kevin Lieser

Kevin Lieser

Kevin Lieser ist ausgebildeter Mediendesigner und seit 2008 mit der TYPO3 Agentur KA Mediendesign unternehmerisch tätig. Seine Leidenschaften sind gutes Webdesign und die PHP Programmierung. Als App Entwickler und Autor mehrerer TYPO3 Extensions engagiert er sich aktiv für die Weiterentwicklung von Webapplikationen und mobilen Anwendungen.