Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] IMAP Flags (Recent, Unseen)

Einklappen

Neue Werbung 2019

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

  • [Erledigt] IMAP Flags (Recent, Unseen)

    Hallo an alle,

    habe mir einen recht umfangreichen IMAP-Client in PHP geschrieben.
    Funktioniert alles bestens, bis auf ein kleines Detail.
    Alle neuen Nachrichten werden mir als "RECENT" angezeigt. Das ist ja bei wirklich neuen Nachrichten auch richtig und nebenbei gesagt ein tolles Feature. Allerdings wird dieses Flag bei mir nicht verändert. Das sollte doch aber in der ersten Session die auf die Mail zugreift passieren, oder?

    Kurz gefragt: Welche IMAP-Funktion setzt denn normalerweise das Flag von Recent auf Unseen (oder Seen)? Macht das bereits imap_open? Oder imap_body oder imap_status?

    Hier mal ein kurzer Code-Auszug:

    PHP-Code:
    $mbox imap_open($server$user$pw);
    $_SESSION["status"] = imap_status($mbox$_SESSION["server"], SA_ALL);

    for (
    $j=1$j<=$_SESSION["status"]->messages$j++) {
      
    $mail[$j] = (imap_fetch_overview($mbox$j));
    }
    $_SESSION["mail"] = $mail;
    imap_close($mbox); 
    "RECENT"-Mails sollten doch jetzt beim nächsten Aufruf nicht mehr als "RECENT" gekennzeichnet sein, oder begehe ich da einen Denkfehler...?

    Danke und Gruß,

    nicktight


  • #2
    Der Logik nach würde ich imap_body sagen. Bevor ich in meinem Mailclient eine Mail nicht ansehe oder manuell als gelesen markiere, behält sie ja auch den ungelesen-Status.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      RFC 3501 - INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1:
      \Recent
      Message is "recently" arrived in this mailbox. This session is the first session to have been notified about this message; if the session is read-write, subsequent sessions will not see \Recent set for this message. This flag can not be altered by the client.
      Allerdings weiss ich nicht, ob eine per imap_open hergestellte Verbindung per Default „read-write” ist; dem PHP-Manual kann ich auf die Schnelle nur entnehmen, dass man die Option OP_READONLY mitgeben muss, wenn man explizit das Gegenteil erreichen möchte.

      Kommentar


      • #4
        Danke Euch erstmal.
        Aber das RFC hatte ich auch schon konsultiert - da steht natürlich nichts spezifisches über PHP-IMAP-Funktionen.
        Und imap_open sollte laut PHP-Manual eigentlich ohne den Parameter /readonly standardmäßig read-write sein.
        Laut RFC kann das "RECENT"-Flag übrigens auch nicht manuell verändert werden...

        Kommentar


        • #5
          Du hast da kein PHP-Problem vorliegen. Das \Recent-Flag wird von PHP überhaupt nicht angefasst (kann es auch nicht), sondern es wird Serverseitig beim Aufbau einer Authentifizierten Verbindung verwaltet. (letztendlich also bei imap_open()).

          Nun ist es aber so, dass der Support des Recent-Flags bei vielen Mailservern nur sehr eingeschränkt funktioniert. Schau mal hier - da gibt es ne Übersicht.

          Unterm Strich kann man das Recent-Flag vergessen, da es auf den verbreitetesten Mailservern einfach nicht anständig funktioniert. Die gängigen Clients umschiffen das Problem, in dem sie die Anzahl der Nachrichten mit ohne \seen auswerten, und zusätzlich den letzten bekannten Login-Zeitpunkt bei der Auswahl berücksichtigen.

          Gruß Jens

          Kommentar


          • #6
            Hmpf...
            Unterm Strich kann man das Recent-Flag vergessen, da es auf den verbreitetesten Mailservern einfach nicht anständig funktioniert.
            Sowas in der Art hab ich mir schon gedacht.
            Die gängigen Clients umschiffen das Problem, in dem sie die Anzahl der Nachrichten mit ohne \seen auswerten
            Das werd ich dann wohl auch tun.

            Danke!

            Kommentar


            • #7
              Hmm, alles nochmal analysiert...
              Sieht doch seltsamer aus als gedacht. Ich dachte bisher, nur das RECENT-Flag würde nicht gesetzt werden, aber wie ich gerade feststellen musste, wird auch das SEEN-Flag nicht verändert. Mein Client verhält sich also ganz offensichtlich so als ob er im /readonly - Modus wäre...

              Ideen?

              Kommentar


              • #8
                Bevor wir jetzt weiter machen:
                • Was steht da für ein Server auf der Gegenseite?
                • Sprichst Du den wirklich auch über IMAP an und nicht zufällig über POP?
                • Welche Parameter hast Du bei imap_open() angegeben?
                • imap_body() hast Du benutzt? Wenn ja: mit welchen Optionen?
                • Ist das Flag innerhalb der selben Session gesetzt? Wann geht es ggf. verloren?
                • kannst Du das Flag per imap_setflag_full() setzen? Wie ist der Rückgabewert der Funktion?


                Gruß Jens

                Kommentar


                • #9
                  Was steht da für ein Server auf der Gegenseite?
                  Strato-Server... Keine Ahnung was die für einen Mailserver benutzen.

                  Sprichst Du den wirklich auch über IMAP an und nicht zufällig über POP?
                  PHP-Code:
                  imap_open("{imap.strato.de:143}INBOX"$user$pw); 
                  Welche Parameter hast Du bei imap_open() angegeben?
                  Siehe oben... auf jeden Fall nichts wie /readonly.

                  imap_body() hast Du benutzt? Wenn ja: mit welchen Optionen?
                  Nein... benutze nur imap_fetchstructure und imap_fetchbody. Das müsste aber laut php.net reichen. Immerhin kann man bei beiden Funktionen den Parameter FT_PEEK anhängen, der bewirkt, dass das Seen-Flag nicht verändert wird.

                  Ist das Flag innerhalb der selben Session gesetzt? Wann geht es ggf. verloren?
                  Habe mir ein var_dump($_SESSION) (hier werden auch die Mails zwischengespeichert) eingebaut. Das RECENT-Flag wird nie verändert...

                  kannst Du das Flag per imap_setflag_full() setzen? Wie ist der Rückgabewert der Funktion?
                  Probier ich jetzt aus...

                  Kommentar


                  • #10
                    ...so:
                    imap_setflag_full funktioniert (natürlich nur für das /Seen - Flag.
                    Damit komm ich klar.

                    Danke.

                    Kommentar

                    Lädt...
                    X