Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupération sélection dossiers avec IMAP

et non pas la totalité des dossiers

Sujet résolu
    8 janvier 2020 à 13:27:30

    Bonjour,
    Je souhaite me connecter via IMAP à une boite mail.
    Je parviens à récupérer la totalité des dossiers de cette boite en utilisant

        $imape = imap_open($server, $login, $pass);
        $mailboxes = imap_list($imape, $server, '*');
    


    Je parviens également à ne récupérer qu'un seul dossier en remplaçant l'astérisque par le nom du dossier par exemple

        $imape = imap_open($server, $login, $pass);
        $mailboxes = imap_list($imape, $server, 'Perso');
    


    Mais je voudrais pouvoir sélectionner quelques uns des dossiers de la boite.

    Dans la doc, j'ai vu qu'on pouvait utiliser % pour ne sélectionner que les dossiers parents, mais cela ne me convient pas, car je voudrais accéder à certains parents + leurs enfants.

    Est ce possible?
    Si oui, pouvez vous m'aider?

    Je précise que c'est en php natif.

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      8 janvier 2020 à 19:16:01

      Faire une boucle sur une liste de noms ferait l'affaire non ?
      • Partager sur Facebook
      • Partager sur Twitter

      Blond, bouclé, toujours le sourire aux lèvres...

        9 janvier 2020 à 8:33:35

        Bonjour,

        Merci pour ton message.

        Je pense qu'une boucle n'est pas adaptée car je n'ai pas besoin de tous les noms, uniquement certains.
        Et à priori, en 3ème argument d'imap_list, on ne peux mettre qu'une (et une seule) chaine de caractères

        Je suis novice en php, et encore plus avec imap, désolée si je ne suis pas très claire ou que je ne comprends pas exactement vos messages


        • Partager sur Facebook
        • Partager sur Twitter
          9 janvier 2020 à 20:04:43

          Lauraquat a écrit:

          Je pense qu'une boucle n'est pas adaptée car je n'ai pas besoin de tous les noms, uniquement certains.

          Justement, tu peux mettre faire une liste des noms que tu veux et utiliser une boucle pour appeler ta fonction sur chaque nom de la liste.
          • Partager sur Facebook
          • Partager sur Twitter

          Blond, bouclé, toujours le sourire aux lèvres...

            10 janvier 2020 à 8:24:04

            Je viens de le tenter, malheureusement, j'ai une indication qu'imap_list attend une string et non pas un array...

            $dossiers = [
                    "INBOX/0 - CKC/0 - Rejets DtNet/3 - Rejet Noreply" => "INBOX/0 - CKC/0 - Rejets DtNet/3 - Rejet Noreply",
                    "INBOX/3.1 - IT - Multicases" => "INBOX/3.1 - IT - Multicases",
                ];
            
                $imape = imap_open($server, $login, $pass);
                $mailboxes = imap_list($imape, $server, $dossiers);



            J'ai tenté de faire "cast to string"

            $dossiers = [
                    "INBOX/0 - CKC/0 - Rejets DtNet/3 - Rejet Noreply" => "INBOX/0 - CKC/0 - Rejets DtNet/3 - Rejet Noreply",
                    "INBOX/3.1 - IT - Multicases" => "INBOX/3.1 - IT - Multicases",
                ];
            
                $imape = imap_open($server, $login, $pass);
                $mailboxes = imap_list($imape, $server, (string)$dossiers);


            Mais visiblement ça ne lui convient pas plus, aucun dossier n'apparait



            edit :

            J'ai répondu un peu vite, je n'ai pas fait la boucle dans ma tentative précédente.

            J'ai vu ce code sur la doc php

            <?php
            $mbox = imap_open("{imap.example.org}", "username", "password", OP_HALFOPEN)
                  or die("Connexion impossible : " . imap_last_error());
            
            $list = imap_list($mbox, "{imap.example.org}", "*");
            if (is_array($list)) {
                foreach ($list as $val) {
                    echo imap_utf7_decode($val) . "\n";
                }
            } else {
                echo "imap_list a échoué : " . imap_last_error() . "\n";
            }
            
            imap_close($mbox);
            ?>

            Qui semblerait pouvoir m'aider.
            Seulement, je pense que ça ne s'adapte pas vraiment à mon cas parce que, sauf erreur de ma part, le tableau que je devrais faire (ma variable $dossiers) devrait être à la place de "*" 

            $list = imap_list($mbox, "{imap.example.org}", "*");

            Pour moi ce code fait la liste de tous les dossiers (avec *)
            Et ce qui est attendu à la place de cette * est une string

            Ou j'ai mal compris ce que tu me proposes? Si oui, tu aurais un exemple de code pour que je saisisse mieux, s'il te plait?



            -
            Edité par Lauraquat 10 janvier 2020 à 8:34:24

            • Partager sur Facebook
            • Partager sur Twitter
              10 janvier 2020 à 18:54:02

              Dans l'exemple de la doc la boucle sert à traiter le résultat de la fonction imap_list.

              C'est un cas assez simple et ça mériterais de revoir les bases, parce que les conditions et les boucles, ça se voit assez tôt dans les cours de programmation.

              Tu as une fonction qui prend une valeur, et tu aimerais l'exécuter sur plusieurs valeurs, donc tu fais une boucle pour exécuter plusieurs fois la fonction sur toutes tes valeurs.

              Exemple en PHP approximatif parce que ça fait 15 ans que j'ai pas touché à ce langage :

              $dossiers = array("Perso", "Factures", "Divers")
              
              foreach ($dossiers as $dossier) {
                  imap_list($mbox, "{imap.example.org}", $dossier)
              }

              Après faut récupérer le résultat de imap_list à chaque tour de boucle, mais là c'est juste pour illustrer le principe.

              • Partager sur Facebook
              • Partager sur Twitter

              Blond, bouclé, toujours le sourire aux lèvres...

                13 janvier 2020 à 8:34:07

                Bonjour,
                Je te remercie.
                Effectivement, je n'ai pas encore tous les réflexes et automatismes en tete, je suppose que ça va venir avec le temps (je viens de sortir d'une formation de 3 mois).

                Merci beaucoup  pour ton aide en tous cas!

                • Partager sur Facebook
                • Partager sur Twitter
                  13 janvier 2020 à 12:55:33

                  Trois mois c'est pas beaucoup en effet, normal de pas avoir tous les réflexes pour le moment.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Blond, bouclé, toujours le sourire aux lèvres...

                  Récupération sélection dossiers avec IMAP

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown