Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 02-04-2009, 22:47
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard (gelöst) imap_delete über Schleife geht nicht.

Hallo,

ich habe im folgenden Script einen Denkfehler, komme aber nicht weiter.
Zur Erklärung:

Ich möchte das Postfach abfragen nach Headern, welche als Email Rückläufer erkennbar sind und diese direkt aus dem Postfach löschen.

Das ganze bin ich wie folgt angegangen:

Mit der folgenden Funktion hab ich mir die betreffenden Mails auflisten lassen und baue mir aus diesen ein Array:

PHP-Code:
function getbounces() {
    global 
$undeliverable_emails;
    
error_reporting(E_ALL);
    
$mbox imap_open("{mail.meinserver.de:110/pop3/notls}""user""password");
    echo 
"<h1>Unzustellbare Emails</h1>\n";
    
$folders imap_listmailbox($mbox"{mail.meinserver.de:110/pop3/notls}""*");

    if (
$folders == false) {
        echo 
"Abruf fehlgeschlagen<br />\n";
    } 

    
$undeliverable_emails[] = '';
    
$header imap_mailboxmsginfo($mbox);
    for (
$i 1$i < ($header->Nmsgs)+1$i++) {
        
$header_result = (imap_header($mbox$i));
     
$header_result->from['0']->mailbox.'@'.$header_result->from['0']->host.'<br />';
        
$body imap_header($mbox$i);
        
//print $body->subject.'<br />';
        
$failure_array = array(    '0' => 'failure notice',
                        
'1' => 'delivery failure notification',
                        
'2' => 'unzustellbar',
                        
'3' => 'mail delivery deamon' );
        for (
$ii=0$ii<count($failure_array); $ii++) {
            if (
stristr($body->subject$failure_array[$ii]) != FALSE || $body->subject == '') {
                
$undeliverable_emails[] = array(    $header_result->Msgno => $header_result->from['0']->mailbox
                        
.'@'.
                        
$header_result->from['0']->host);
            } 
        }
    }
imap_close($mbox);
return 
$undeliverable_emails;

Die folgende Funktion sollte jetzt auf Grundlage des Arrays die Emails löschen und wird wie folgt aufgerufen:

PHP-Code:
deletebounces($undeliverable_emails); 
PHP-Code:
function deletebounces($emails) {
    print 
'Zu l&ouml;schende Emails:';
    
$mbox imap_open("{mail.mainserver.de:110/pop3/notls}""user""pass");
    for (
$ie=1$ie<count($emails); $ie++) {
        foreach (
$emails[$ie] as $nmb => $key) {
            print 
$key.' wird gel&ouml;scht<br />';
            
imap_delete($mbox$nmb);
        }
    }
    
imap_expunge($mbox);
    
imap_close($mbox);

Und Ihr werdet lachen, es geht nicht!
Kann mir jemand bitte unter die Arme greifen, habe eine ernsthafte Denkblockade.

Vielen Dank im Voraus und beste Grüsse
Michael

Geändert von francosdad (03-04-2009 um 15:49 Uhr)
Mit Zitat antworten