Hallo liebe PD-Admin Gemeinde,
wie in diversen Themen hier im Forum schon angesprochen, fehlt PD-Admin eine Funktion zur Benachrichtigung von Benutzern bei Gefahr eines Überlaufs ihrer Postbox. Da hierzu nie eine konkrete Aussage gemacht wurde ob das nun umgesetzt wird und vor allem wann, hat einer unserer Entwickler diese Funktion nun in einem einfachen PHP-Skript umgesetzt. Nach einem Monat Testzeit hat sich das Skript bewährt und ich möchte es euch nun auch zur Verfügung stellen.
---
Funktion:
- Prüfung der Postbox-Größen
- Prüfung der erlaubten Quota (Auswertung .quota File)
- Berechnung des verbrauchten Speicherplatzes
- Bei erreichen eines definierten Schwellwertes erfolgt die Auslößung einer Benachrichtigung an den betroffenen Benutzer (E-Mail wird aus DB geholt)
Integration:
1. Archiv von laden *1 und an beliebige Stelle entpacken.
2. Variablen in der postbox_check.php anpassen. Insbesondere das DB Passwort für vadmin, Absenderadresse und event. Mailtexte.
Schwellwert ist auf 70% gestellt und kann nat. auch geändert werden.
3. Zum Test kann man die "Debug Echo" und den Mail Eintrag Zeile 132 nutzen und das Skript mit "php postbox_check.php" aufrufen(oder im Browser falls erreichbar).
4. Die Debug Settings wieder auskommentieren und das Skript per Cronjob einbinden. Z.B.:
*1: http://www.leits.com/pub/upload/postbox_check.zip
Feedback erwünscht. Dieses Skript kann natürlich auch wenn gewünscht in PD-Admin aufgenommen werden. Ist aber halt PHP, kein Perl
<?php
///////////////////////////////////////////////////////////
// Postbox Quota Checker fuer
// PD-Admin Installationen
//
// Version 0.9
//
// Die Groesse der Postboxen wird mit der vergebenen Quota
// verglichen und ab einem einstellbaren Schwellwert
// eine Benachrichtigung ausgeloest.
// E-Mailadressen werden aus der PD-Admin DB geholt.
//
// Author: Rayk Zimmermann - LEITS GbR [www.leits.com]
//
// License: GPL - see LICENSE File
////////////////////////////////////////////////////////////
//Mailklasse includen
require("mailclass/email_versand.php");
# Speicherpfad zu den Postfaechern (z.b. /home/popuser/popboxen)
$popboxpfad='/home/popuser/popboxen';
# Verbindungs-Einstellungen zur MySQL DB
$dbhost="localhost";
$dbuser="vadmin";
$dbpass="yourpassword";
$dbname="vadmin";
//Ab welchem Prozentwert soll Email verschickt werden
$schwelle=70;
//Absender fuer Email-Versand
$abs_name = "Postmaster - Quota-Check";
$abs_email = "postmaster@yourdomain.tld";
//Kopie an Postmaster (wenn definiert)
$bcc_email='';
function dirscan($dir)
{
$dirlist = opendir($dir);
while ($file = readdir ($dirlist))
{
if ($file != '.' && $file != '..' && $file != 'mailclass')
{
$newpath = $dir.'/'.$file;
$level = explode('/',$newpath);
if (is_dir($newpath))
{
$mod_array[] = array(
'level'=>count($level)-1,
'path'=>$newpath,
'name'=>end($level),
'content'=>dirscan($newpath));
}
}
}
closedir($dirlist);
return $mod_array;
}
function dir_size($dir, $size = 0) {
$handle = opendir($dir);
while ($file = readdir($handle)) {
if ($file == '.' || $file == '..') continue;
$full_path = $dir.$file;
if (is_dir($full_path)) {
$size = dir_size($full_path.'/', $size);
} else {
$size += filesize($full_path);
}
}
closedir($handle);
return $size;
}
$ordner = dirscan($popboxpfad);
for($i=0;$i<sizeof($ordner);$i++) {
for($j=0;$j<sizeof($ordner[$i]['content']);$j++) {
/* Debug Echo
echo $ordner[$i]['content'][$j]['path']."<br>"; */
$filename = $ordner[$i]['content'][$j]['path']."/.quota";
$handle = fopen ($filename, "r");
$contents = fread ($handle, filesize ($filename));
fclose ($handle);
/* Debug Echo
echo "Quota: ".($contents/1000)."MByte<br>"; */
$total=dir_size($ordner[$i]['content'][$j]['path']."/Maildir/");
/* Debug Echo
echo "Used: ".trim($total)."Byte<br>"; */
$prozent=($total*100)/($contents*1000);
/* Debug Echo
echo "Belegt: ".$prozent." %<br>"; */
if($prozent>=$schwelle) {
/* Verbindung zum Datenbank-Server */
$db = @mysql_pconnect($dbhost,$dbuser,$dbpass);
/* Waehle Datenbank */
mysql_select_db($dbname,$db);
/* Abfrage der Email Adresse des popusers */
$login=trim($ordner[$i]['content'][$j]['name']);
$result = mysql_query("SELECT email from pop3 where login='$login'");
$erg = mysql_fetch_array($result);
$email = $erg["email"];
/* Betreff der Warnungsmail */
$betreff = "Der Speicherplatz ihres Postfaches ist zu ".round($prozent)." % belegt";
/* Mailtext der Warnungsmail */
$message = "Sehr geehrter Kunde,\n\nder verfuegbare Speicherplatz Ihres POP-Accounts -".$login."- (".$email.") ist zu mehr als ".round($prozent)." % belegt,\nbitte rufen Sie Ihre E-Mails ab. Bitte beachten Sie das bei 100 Prozent Fuellung keine E-Mails mehr angenommen werden.\n\n\nMit freundlichen Gruessen, Ihr Postmaster";
/* Mailempfänger für Testzwecke überschreiben - Debug Setting
$email = "debug@yourhost.com"; */
/* Mailversand */
if(isset($email) AND $email!="") {
email_senden($abs_email,$abs_name,$betreff,$message,'',array($email),array(),array(),array(),array($bcc_email),array(),array(),array(),array($abs_email),array());
}
/* Debug Echo
echo "Email geht an: ".$email."<br>"; */
}}}
?>
Alles anzeigen