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

  • Gast-Avatar
    Ein Gast erstellte das Thema imap / foreach-Schleife: unerklärliche Fehlermeldung.

    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

  • Gast-Avatar
    Ein Gast antwortete
    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.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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..."

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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...

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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.

    Einen Kommentar schreiben:

Lädt...
X