Mailstatistik von Postfix per Email

Status
Für weitere Antworten geschlossen.

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Postfix ist von Hause aus ziemlich gesprächig in den Logs (wenn man ihn denn lässt). Dies hat ein findiger Kerl genutzt und ein feines Perlscript geschrieben, das die Log Files auswertet und eine geordnete Statistik als Text zurückgibt. Das Teil heisst pflogsumm (gibt auch eine deutsche Übersetzung).
Wenn ihr das Teil nutzen wollt, dann müsst ihr den syslog entweder dazu bringen alle Postfix Meldungen zu loggen oder einen alternativen syslog installieren.
Zusätzlich muss plfogsumm von jemandem mit Leserechten auf die Log Files aufgerufen werden (meist Root). Das ist eigentlich kein Problem weil man pflogsumm am besten als cronjob ausführen lässt. Per Default wird ein Plain Text zurückgegeben. Dazu habe ich dann ein php Script geschrieben, welches von wget als Cronjob aufgerufen wird und die Ergebnisse per Email verschickt
PHP:
<?php
//error_reporting(E_ALL);
//cache file auslesen
$contstr = @file_get_contents('/usr/syno/synoman/phpsrc/mailstat/stat.txt');
$str = array();
exec('/opt/bin/perl /volume1/public/pflogsumm/pflogsumm.pl today /opt/var/log/mail.log',$str);
$str = implode("\n",$str);
$zeit = time();
if($str != $contstr){
  $fp = fopen('/usr/syno/synoman/phpsrc/mailstat/stat.txt','w');
  @exec("echo '$str' | zip > /usr/syno/synoman/phpsrc/mailstat/postfix_stat_{$zeit}.zip");
  $zip = @file_get_contents("/usr/syno/synoman/phpsrc/mailstat/postfix_stat_{$zeit}.zip");
  $header = "From: Postfix Statistics <EUER ABSENDER>\n";
  $header .= "MIME-Version: 1.0\n";
  $header .= "Content-type: multipart/mixed; boundary=\"".md5($zeit)."\"";
  $body = "--".md5($zeit)."\n";
  $body .= "Content-type: text/plain\n";
  $body .= "Content-transfer-encoding: base64\n\n";
  $body .= chunk_split(base64_encode($str),70,"\n")."\n";
  $body .= "--".md5($zeit)."\n";
  $body .= "Content-Type: application/zip\n";
  $body .= "Content-Disposition: attachment; filename=stat.zip\n";
  $body .= "Content-transfer-encoding: base64\n\n";
  $body .= chunk_split(base64_encode($zip),70,"\n");
  $body .= "--".md5($zeit)."--";
  mail('Postmaster <EMPFÄNGER ADRESSE>','Daily Postfix Statistic from '.date('r',time()),$body,$header);
  $str = array();
  exec('/opt/bin/perl /volume1/public/pflogsumm/pflogsumm.pl today /opt/var/log/mail.log',$str);
  $str = implode("\n",$str);
  fwrite($fp,$str);
  fclose($fp);
}
?>
dieses Script müsst ihr an Eure Gegebenheiten anpassen und richtet am besten einen cronjob für wget ein, der das Script regelmässig aufruft. Eine Email wird nur versendet wenn der neue String sich von jenem im "Cache" unterscheidet

p.s. wenn ihr die Stats so wie ich oben neben Attachment auch als Text versenden wollt, dann müsst ihr beachten, dass die Postfix Mailfilter auch auf diese Email angewendet werden. Es kann also gut sein, dass Postfix die Annahme verweigert (bei gesetzter body_check Konfig Var in main.cf ist das häufig der Fall). Darum habe ich die Textversion mittels base64 Codierung verschickt, so schlagen die Filter nicht an ;)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat