Ankündigung

Einklappen
Keine Ankündigung bisher.

Sequence out of range [IMAP Fehler]

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sequence out of range [IMAP Fehler]

    Hallihallo,
    ich mal wieder. Bei der Verwendung der IMAP FUnktionen unter PHP
    gibt es einen seit längerem bekannten Bug.. Ist die Anzahl der Nachrichten im Postfach kleiner als 1 wird
    Code:
    Notice: Unknown: Sequence out of range (errflg=2) in Unknown on line 0
    ausgespuckt.

    Das seltsame bei mir ist jetzt aber, dass sich eine Mail im entsprechenden Ordner befindet, ich dennoch diese Fehlermeldung erhalte...

    Imgroßen und ganzen soll das ding einfach nur eine Mail nach Betreff öffnen, den Anhang (eine CSV Datei) laden und in eine Datenbank schmeissen.
    Hier mein komplettes Script(mit einigen unrelevanten Kürzungen):
    PHP-Code:
    <?php
    $db_host           
    =                        "ip";                                    // IP des DatenbankHosts
    $db_user           =                        "user";                                                // User der Datenbank
    $db_pass           =                        "pw";                                        // Passwort des Users
    $datab             =                        "db";                                                // Datenbankname
    $table             =                        "table1";                                                // Tabellenname
    $table2             =                        "table2";                                                // Tabellenname 2
    $db              =                        mysql_connect($db_host,$db_user,$db_pass) or die(mysql_error()); // Zur DB Verbinden
    $email_ordner        =    "{domain.de{variablen}/ordner/unterordner";    // Mailer
    $email                =    "mail";                                                        //Email bzw User
    $email_pass            =    "mail_pass";                                                                //Passwort der Mail

    set_time_limit(6000);

    function 
    k2p($k2p) {
        return 
    str_replace(',''.'$k2p);
    }
    function 
    p2n($p2n) {
        return 
    str_replace('.'''$p2n);
    }
    function 
    p2b($p2b) {
        return 
    str_replace('.''-'$p2b);
    }
    function 
    hdf($hdf) {
        return 
    str_replace('='''$hdf);
    }
    function 
    get_monday_of_week($kw,$year false) {
        if (
    $year == false$year date("Y");
        if (
    $kw || $kw 53) return false;
        
    $dayofweek = (intval(date("w",mktime(0,0,0,1,1,$year))) == 0) ? intval(date("w",mktime(0,0,0,1,1,$year)));
        
    $dayofyear 7*($kw-2)+(9-$dayofweek);
        
    $days      0;
        
    $i           1
        while (
    true) {
            if (
    $days+date('t',mktime(0,0,0,$i,1,$year)) < $dayofyear$days += date('t',mktime(0,0,0,$i++,1,$year));
            else return 
    $datum = (($dayofyear-$days 1) ? : ($dayofyear-$days)).".".($i).".$year";
        }
    }

    error_reporting(E_ALL);

    $logfile_uu "C:\\apachefriends\\xampp\\htdocs\\tool\\log\\log2_".date('Y-m-d_G-i').".log";
    $logfile_uu2 "C:\\apachefriends\\xampp\\htdocs\\tool\\log\\log2_".date('Y-m-d_G-i').".log";

    //mail holen
    $mbox imap_open ($email_ordner,$email,$email_pass)or die('Cannot connect to Mailserver: ' .imap_last_error());
    $MC imap_check($mbox);
    if (
    $MC->Nmsgs == 0) { imap_close($mbox); }
    $result imap_fetch_overview($mbox,"2:{$MC->Nmsgs}",0);

    foreach (
    $result as $overview
        {
            
    $struct imap_fetchstructure($mbox,$overview->uid,FT_UID);
            
    $msg preg_replace("/=(\r?)\n/"''imap_fetchbody($mbox $overview->msgno,2));
            
    //$msg = imap_fetchbody($mbox , $overview->msgno,2);
            
            //heutige datum generieren, um es später in die db einzutragen
                
    $date date("Y-m-d");
        
            if(
    $overview->subject == 'Test_1')
            {
                
    //zeugs in datenbank schreiben
                
    $csv explode("\n",str_replace('"',''$msg));
                
                foreach (
    $csv as $line
                {
                    if (
    $fields[0] == "Webseite")
                        
    $ok true;
                    
                    
    $fields explode (';'$line);
                    if(
    $ok)
                    {
                        
    //festlegung was in welche spalte kommt
                        
    $website trim($fields[0]);
                        
    $date_art "test";
                        
                        
    $weeke strpos($fields[0], "W");
                        
    $monte strpos($fields[0], "M");
                        
                        if (
    $weeke == && $monte != 5)
                        {
                            
    $ex explode("-"$fields[1]);
                            
    $test explode("W"$ex[1]);
                            
    $woche $test[1];
                            
                            
    $j $ex[0];
                            
    $kw $woche;
                            
                            
    $date2 get_monday_of_week($kw,$j);
                            
    $date_art "weekly";
                        }
                        else if (
    $monte == && $weeke != 5)
                        {
                            
    $ex explode("-"$fields[1]);
                            
    $test explode("M"$ex[1]);
                            
    $month $test[1];
                            
                            
    $date2 "01.".$month.".".$ex[0];
                            
    $date_art "monthly";
                        }
                        else
                        {
                            
    $date2 p2b($fields[1]);
                            
    $date_art "daylie";
                        }
                        
                        
    $impressions p2n($fields[2]);
                        
    $views p2n($fields[3]);
                        
    $unique_users p2n($fields[4]);
                        
    $impr_per_uu p2n($fields[5]);
                        
    $views_per_uu p2n($fields[6]);
                        
    $clicks p2n($fields[7]);
                        
    $k_rate_prozent k2p($fields[8]);
                        
    $view_k_rate_prozent k2p($fields[9]);
                        
    $uu_k_rate k2p($fields[10]);
                        
                        
    $qs2 "INSERT IGNORE INTO ".$datab.".".$table2." (`webseite`, `date`, `impressions`, `views`, `unique_users`, `impr_per_uu`, `views_per_uu`, `clicks`, `k_rate_prozent`, `view_k_rate_prozent`, `uu_k_rate`, `insert_date`, `date_art`) VALUES ('".$website."', '".$date2."', '".$impressions."', '".$views."', '".$unique_users."', '".$impr_per_uu."', '".$views_per_uu."', '".$clicks."', '".$k_rate_prozent."', '".$view_k_rate_prozent."', '".$uu_k_rate."', '".$date."', '".$date_art."');";

                        
    $qs3 hdf(trim($qs2)); //gleichzeichen löschen mit der oben definierten funktion "hdf"
                        
    $qs4 str_replace(array("\n","\r","\n\r"),"",$qs3); //absätze löschen
                        
                        
    mysql_query($qs4) or file_put_contents($logfile_uumysql_error().$qs4."\n"FILE_APPEND LOCK_EX);;
                        
    file_put_contents($logfile_uu2$qs4."\n"FILE_APPEND LOCK_EX);;
                        
    imap_mail_move($mbox,$overview->msgno,'ordner/unterordner/done');
                        
    imap_expunge($mbox);
                        
                    }
                }
            }
            else if(
    $overview->subject == 'Test_2)
            {
                print_r("nope.");
            }
        }
    imap_close($mbox);
    ?>
    Bis vor kurzem ging noch alles, jetzt mit einigen Änderungen (Die If-Bedingungen für die Konvertierung Monat/Woche wurdne hinzugefügt) will es nicht mehr.

  • #2
    Hi,

    und warum verwendest Du nicht einfach roundcube o.ä.?

    mfg Wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      Wie meinst du das genau?

      EDIT: Falls du darauf aus bist, die Datei per Hand zu laden oder so.. Vergiss es.
      Die Mail kommt jeden Tag 1x und beinhaltet rund 170.000 Zeilen.

      Da brauche ich ein Script, welches per Cronjob einmal am Tag da durchrennt und das automatisch macht..

      Kommentar


      • #4
        Sorry, ungenau gelesen. Dachte du versuchst einen E-Mail client nachzubauen.

        Was Dir helfen dürfte, damit du das nicht von Hand "zusammenfrimmelst", dürfte zend_mail z.B. sein. Schau mal hier: http://framework.zend.com/manual/1.1...mail.read.html

        mfg wolf29
        while (!asleep()) sheep++;

        Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

        Kommentar


        • #5
          Soweit ich das jetzt auf die schnelle sehen konnte, ist das ganze "IMAP Funktionen nur mit anderem Namen" ?!

          Mal davon abgesehen, dass mein Script so gut wie fertig ist, wenn da nicht der Fehler wäre

          Kommentar

          Lädt...
          X