Ankündigung

Einklappen
Keine Ankündigung bisher.

imap / foreach-Schleife: unerklärliche Fehlermeldung

Einklappen

Neue Werbung 2019

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

  • imap / foreach-Schleife: unerklärliche Fehlermeldung

    Hallo,
    ich rufe mit der imap-Funktion eine Mailbox ab und verarbeite die Mails dann weiter.
    Mit diesem Code-Ausschnitt (den ich mal in drei "Blöcke" gegliedet habe), werden alle Email-Informationen ausgelesen, die ich brauche:

    Code:
    // Block1: text-type + text-codierung abrufen
    
    $structure = imap_fetchstructure($mailbox, $num);
    
      $txttype = $structure->type;
      $txtcode = $structure->encoding;
    
    // Block2: textbody abrufen
    
    $mailtext = imap_body($mailbox, $num);
    
    // Block3: header-elemente abrufen
    
    $content = imap_header($mailbox, $num);
    
      $subject = $content->subject;
    
      $from = $content->from;
      foreach ($from as $xx => $object) {
    
      $mailname = $object->mailbox;
      $hostname = $object->host;
    
      $email = $mailname . "@" . $hostname; }
    
      $toaddys = " ";
    
      $to = $content->to;
      foreach ($to as $xx => $object) {
    
      $addy = $object->mailbox . "@" . $object->host;
    
      $toaddys = $toaddys . " " . $addy; }

    Das funktioniert soweit auch einwandfrei! Wenn ich aber den 1. Block ans Ende setzte (und sonst nix am Script ändere), kommt folgende Fehlermeldung:

    Warning: Invalid argument supplied for foreach() in /home/www/web184/html/test/sms2.php on line 40

    Warning: Invalid argument supplied for foreach() in /home/www/web184/html/test/sms2.php on line 50

    Wie ist das nur durch Änderung der Reihenfolge zu erklären? Die einzelnen Blöcke bauen ja nicht aufeinander auf, oder doch?? Ist der Code irgendwie unsauber?

    Luca

  • #2
    Re: imap / foreach-Schleife: unerklärliche Fehlermeldung

    Du verwendest in beiden foreach Schleifen die selbe Variable ($object).

    Im weiteren ist der Bezeichner object nicht besonders sinnvoll.

    Kommentar


    • #3
      Re: imap / foreach-Schleife: unerklärliche Fehlermeldung

      Zitat von meikel
      Du verwendest in beiden foreach Schleifen die selbe Variable ($object).

      Im weiteren ist der Bezeichner object nicht besonders sinnvoll.
      ich hab' den Variablen jetzt andere 'gute' Namen gegeben: Das Problem bleibt aber !

      Nochmal zur Erläuterung: Das Problem ist eher theoretischer Natur, da das Script ja mit dem oben gezeigten Code funktioniert. Nur wenn ich die
      imap_fetchstructure-Abfrage hinter die beiden anderen setze, läufts nicht mehr.

      Oder muss imap_fetchstructure immer vor imap_header abgefragt werden?? Im Handbuch steht dazu nix...

      Kommentar


      • #4
        Re: imap / foreach-Schleife: unerklärliche Fehlermeldung

        Zitat von oriolus
        Das Problem bleibt aber !
        Eines der Probleme ist folgendes:
        Code:
        $structure = imap_fetchstructure($mailbox, $num); 
          $txttype = $structure->type; 
          $txtcode = $structure->encoding;
        Du mußt natürlich vorher prüfen, ob $struktur auch wirklich ein Objekt ist, bevor Du darauf zugreifst.

        Hier genauso:
        Code:
        $content = imap_header($mailbox, $num); 
          $subject = $content->subject; 
          $from = $content->from; 
        #...
        Oder muss imap_fetchstructure immer vor imap_header abgefragt werden?? Im Handbuch steht dazu nix...
        Ich vermute mal, daß die Struktur vor imap_body() abgefragt werden muß, wenn Du nicht das Flag FT_PEEK verwendest. Dann könnte es möglich sein, daß die Nachricht als "gesehen" markiert wird. Das bedeutet zumindest bei einer POP3 Box, daß die Nachricht dann "weg" ist.

        Kommentar


        • #5
          Re: imap / foreach-Schleife: unerklärliche Fehlermeldung

          Zitat von meikel
          Eines der Probleme ist folgendes:
          Code:
          $structure = imap_fetchstructure($mailbox, $num); 
            $txttype = $structure->type; 
            $txtcode = $structure->encoding;
          Du mußt natürlich vorher prüfen, ob $struktur auch wirklich ein Objekt ist, bevor Du darauf zugreifst
          Wie mache ich denn das??

          imap_fetchstructure ist doch so definiert, dass es ein Objekt zurückgibt, warum also erst prüfen?

          Kommentar


          • #6
            Re: imap / foreach-Schleife: unerklärliche Fehlermeldung

            Zitat von oriolus
            Zitat von meikel
            Du mußt natürlich vorher prüfen, ob $struktur auch wirklich ein Objekt ist, bevor Du darauf zugreifst
            Wie mache ich denn das??

            imap_fetchstructure ist doch so definiert, dass es ein Objekt zurückgibt, warum also erst prüfen?
            Du mußt testen, ob es erfolgreich war!

            Code:
            function lies ($mailbox, $num)
            {
              $structure = imap_fetchstructure($mailbox, $num); 
              if (! is_object($structure))
                 return false;
            
            #...
            
              $txttype = $structure->type; 
              $txtcode = $structure->encoding;
              if (empty($txttype) OR empty($txtcode))
                 return false;
            
            # ...
            
            }
            "So oder so ähnlich..."

            Kommentar


            • #7
              Okay, Danke!

              Hab' nochmal rumprobiert und bin nun verstärkt der Meinung, dass es nur an der Reihenfolge der einzelnen imap-Funktionen liegen kann: auch gut zu wissen... Hätte ich nicht zufällig die richtige Reihenfolge gewählt, hätte ich das Script nie zusammengekriegt.

              Kommentar

              Lädt...
              X