Stefan: Script um eMails in eine Datenbank zu schreiben

Beitrag lesen

Hallo,

ich habe ein Script geschrieben, dass meinen eMail-Account auf bestimmte eMails überprüft, relevante eMails (Identifikation durch Angabe einer bestimmten Kennung) in eine Datenbank schreibt und anschließend löscht. eMails, die nicht den Kriterien entsprechen, werden nicht berücksichtigt. Das Script läuft soweit einwandfrei, allerdings muss ich es immer mehrmals aufrufen, bis auch wirklich alle relevanten eMails in die Datenbank geschrieben bzw. anschließen gelöscht wurden. Hat jemand eine Idee woran das liegt?

Weiterhin wäre ich für Verbesserungsvorschläge (evtl. zur Optimierung) sehr dankbar, da das Script später einmal über einen Cronjob laufen soll.

Vielen Dank an alle,

Stefan

Hier das Script: <? // (C)2003 by  Stefan Spieren // stefan@spieren.de // http://stefan.spieren.de // // Dieser Header, der Scriptname und alle anderen Kommentare in // diesem Script müssen intakt bleiben.

//Zugangsdaten MySQL $server = ""; $user = ""; $pass = ""; $db = ""; $table = "";

$conn = @mysql_connect($server, $user, $pass); if (!$conn) {echo "Datenbankfehler!"; exit;} $verbindung = @mysql_select_db($db); if (!$verbindung){echo "Datenbank existiert nicht"; exit;}

//Zugangsdaten Mailbox $username = ""; $password = ""; $mailserver = ""; //POP=110, IMAP=143

//Einstellungen $subject_kennung = "APO"; $body_auswertung = "###BESTELLUNG###"; $bestellung_name = "Bestellung:"; $adresse_name = "Adresse:"; $telefon_name = "Telefon:"; $nachricht_name = "Nachricht:";

//Mailbox öffnen $mbox = imap_open("{$mailserver}INBOX",$username,$password); $mail_insg = imap_num_msg($mbox);

//alle vorgemerkten Mails löschen if($QUERY_STRING==delall) { imap_expunge($mbox); }

if(imap_num_msg($mbox)!=0) { $mail_norel=""; $entryok="0"; for ($i = 1; $i <= imap_num_msg($mbox); $i++) {

$header = imap_headerinfo($mbox, $i, 80, 80);

$from = $header->from[0]; $name = $from->personal; $email = $from->mailbox . "@" . $from->mailbox; $subject = $header->fetchsubject; $date = $header->udate; $messageBody = imap_body($mbox, $i);

//Prüfen ob Mail erlaubte Mail, Filtern nach $subject_kennung     if (ereg($subject_kennung,$subject))     {

//Prüfen ob HTML             if (eregi('<body',$messageBody))             {             preg_match_all("=<body[^>]>(.)</body>=siU", $messageBody, $a);             $messageBody = strip_tags($a[1][0]);             }

//Bereich festlegen         $start_bereich = strpos($messageBody,$body_auswertung)+strlen($body_auswertung);         $ende_bereich = strrpos($messageBody,$body_auswertung);         $laenge_bereich = $ende_bereich-$start_bereich-strlen($body_auswertung);

$bereichBody = trim(substr($messageBody, $start_bereich, $laenge_bereich));

//Positionen bestimmen         $positionen_start = 0;         $bestellung_start = $positionen_start+strlen($bestellung_name);         $adresse_start = strpos($bereichBody,$adresse_name)+strlen($adresse_name);         $telefon_start = strpos($bereichBody,$telefon_name)+strlen($telefon_name);         $nachricht_start = strpos($bereichBody,$nachricht_name)+strlen($nachricht_name);         $positionen_ende = strlen($bereichBody);

//Längen berechnen         $bestellung_laenge = $adresse_start-strlen($adresse_name)-strlen($bestellung_name);         $adresse_laenge = $telefon_start-$adresse_start-strlen($telefon_name);         $telefon_laenge = $nachricht_start-$telefon_start-strlen($nachricht_name);         $nachricht_laenge = $positionen_ende;

//Ausgabe der Positionen bestimmen         $bestellung = trim(substr($bereichBody, $bestellung_start, $bestellung_laenge));         $adresse = trim(substr($bereichBody, $adresse_start, $adresse_laenge));         $telefon = trim(substr($bereichBody, $telefon_start, $telefon_laenge));         $nachricht = trim(substr($bereichBody, $nachricht_start, $nachricht_laenge));

//Formatieren der Datensätze         $id = "";

//Filterkennung löschen             $subject = ereg_replace($subject_kennung,'',$subject);

//Header konvertieren (non-Microsoft)             if(ereg("=?.{0,}?[Bb]?",$subject)){             $arrHead=split("=?.{0,}?[Bb]?",$subject);             while(list($key,$value)=each($arrHead)){             if(ereg("?=",$value)){             $arrTemp=split("?=",$value);             $arrTemp[0]=base64_decode($arrTemp[0]);             $arrHead[$key]=join("",$arrTemp);             }             }             $subject=join("",$arrHead);             }

//deutsche Sonderzeichen konvertieren             if(ereg("=?.{0,}?Q?",$subject)){             $subject=quoted_printable_decode($subject);             $subject=ereg_replace("=?.{0,}?Q?","",$subject);             $subject=ereg_replace("?=","",$subject);             }

//Sonderzeichen entfernen             $subject=ereg_replace("-"," ",$subject);             $subject=ereg_replace("_"," ",$subject);             $subject = trim(preg_replace("/[^a-zA-Z0-9 äüöÄÜÖ]/","",$subject));

$kategorie = $subject;         $bestellung = trim($bestellung);         $adresse = trim($adresse);         $telefon = trim($telefon);         $nachricht = trim($nachricht);         $name = $name;         $email = $email;         $datum = $date;         $status = "0";

//Eintrag in Datenbank         $abfrage = "INSERT INTO $table (id, kategorie, bestellung, adresse, telefon, nachricht, name, email, datum, status) VALUES ('$id', '$kategorie', '$bestellung', '$adresse', '$telefon', '$nachricht', '$name', '$email', '$datum', '$status')";         $result = mysql_query($abfrage, $conn);         if ($result)         {         //zum Löschen markieren         imap_delete ($mbox, $i);         $entryok++;         }

//entgültig Löschen         imap_expunge($mbox);

//Ausgabe         if($QUERY_STRING==det)         {         echo "<b>Name:</b><br>\n".$name;         echo "<br>\n";         echo "<b>eMail:</b><br>\n".$email;         echo "<br>\n";         echo "<b>Kategorie:</b><br>\n".$kategorie;         echo "<br>\n";         echo "<b>Bestellung:</b><br>\n".$bestellung;         echo "<br>\n";         echo "<b>Adresse:</b><br>\n".$adresse;         echo "<br>\n";         echo "<b>Telefon:</b><br>\n".$telefon;         echo "<br>\n";         echo "<b>Nachricht:</b><br>\n".$nachricht;         echo "<br>\n";         echo "<b>Datum:</b><br>\n".$date;         echo "<hr>\n";         }     }     //Filtern nicht erlaubter Mails     else     {     $mail_norel++;     } }

//Ergebnis if($QUERY_STRING==erg || $QUERY_STRING==det) { $mail_rel = $mail_insg-$mail_norel; $mail_uebrig = imap_num_msg($mbox); echo "<h4>Einstellungen</h4>"; echo "Filter für Betreffzeile: ".$subject_kennung; echo "<br>\n"; echo "Start/Ende für Auswertung: ".$body_auswertung; echo "<br>\n"; echo "Einleitung 1: ".$bestellung_name; echo "<br>\n"; echo "Einleitung 2: ".$adresse_name; echo "<br>\n"; echo "Einleitung 3: ".$telefon_name; echo "<br>\n"; echo "Einleitung 4: ".$nachricht_name; echo "<br>\n"; echo "<br>\n"; echo "<h4>Ergebnis</h4>"; echo $mail_insg." eMail(s) insgesamt"; echo "<br>\n"; echo "davon enthalten ".$mail_norel." nicht '".$subject_kennung."' in der Betreffzeile"; echo "<br>\n"; echo $entryok." von ".$mail_rel." relevanten eMails(s) wurden in der Datenbank gespeichert und gelöscht."; echo "<br>\n"; echo $mail_uebrig." eMail(s) auf dem Server."; }

} else { echo "keine Nachrichten auf dem Server!"; }

//Mailbox schließen imap_close($mbox); ?>