IMAP auslesen und Mails weiterleiten?

BartTheDevil89

Devilution Media
ID: 87739
L
2 Mai 2006
3.960
103
Hallo zusammen,

ich muss aktuell eine eMail-Weiterleitung durcharbeiten, die folgendes können soll: Alle eMails laden per catch-all in einem Postfach. Alle 2 Minuten läuft ein Cronjob, der alle eMails abruft, mit einer Empfängerdatenbank vergleicht und entsprechend weiterleitet. Danach natürlich aus der Mailbox löschen.

Technisch bin ich aktuell hier:

1. Datenbank

2. Ein eMail-Postfach, das alle eMail empfängt.

3. Cronjob
PHP:
<?php

//Parameter festlegen
$email_server="www....";
$email_benutzer="web1p1";
$email_passwort="...";

//Log Details
$log_details = "";

//Mailbox auslesen
$mbox = imap_open("{".$email_server.":143/novalidate-cert}INBOX", $email_benutzer, $email_passwort);
$imap_array=imap_search($mbox, "ALL");
   
if (!is_array($imap_array)) {exit;}
$count_mails = 0;
foreach ($imap_array as $nr)
{
	
	$count_mails++;
   
	//Header auslesen
    $header = imap_headerinfo($mbox, $nr);
    
    //Mail - Datum lesen
    $mail_date = addslashes($header->date);
    $mail_timestamp = strtotime($mail_date);
    
    //Mail - Empfänger lesen
    $mail_empfaenger = $header->to;
    
    //Mail - Titel lesen
    $mail_subject = addslashes($header->subject);
    if ($mail_subject == '') {
        $mail_subject = 'Kein Betreff';
    }    

    //Ausgabe
    $log_details .= "Mail gelesen $mail_subject<br />
";
    
    //Empfänger durchgehen
    foreach ($mail_empfaenger as $empf){
    	
    	$empf_name = $empf->mailbox;
    	$empf_domain = $empf->host;
    	$empf_mail = $empf_name."@".$empf_domain;    	

    	$log_details .= "- Mail weitergeleitet an $empf_mail<br />
";

        //Datenbankabfrage um zu prüfen, ob $empf_mail dort vorhanden
        $mail_weiter = ...;
    	
    	//Mail weiterleiten
    	imap_mail($mail_weiter , $mail_subject, imap_body($mbox, $nr), imap_fetchheader($mbox, $nr), NULL, $mail_weiter);
    	
    }
          
    imap_delete($mbox, $nr); // Die Mail wird hier gelöscht, nachdem sie weitergeleitet wurde
}
   
imap_expunge($mbox);               
imap_close($mbox);

//Log setzen
$log_message = "$count_mails Mails wurden erfolgreich weitergeleitet<br />
$log_details";

echo $log_message;
?>

Vom Grundkonzept geht das auch - aber leider nur vom Grundkonzept. Denn ich habe zig Probleme:
- Mails mit mehreren Empfängern werden leider nicht korrekt erkannt
- Mails, die HTML nutzen, haben leider einen völlig anderen Header-Bereich und es wird der Titel nicht korrekt erkannt
- es wird nichts gelöscht nachdem es verschickt wurde
...

Bin ich daher mit dem Ansatz völlig auf dem falschen Weg? Ich weiß, dass man sowas eignetlich über confixx oder ähnliches abbbildet, aber es ist leider nicht möglich - diese Weiterleitungstabelle wird aus einem PHP-Script heraus erzeugt.

Danke - Schöne Grüße :roll: