Avatar billede danielss Nybegynder
01. november 2007 - 13:40 Der er 3 kommentarer og
1 løsning

IMAP folder tree

Hej

Jeg forsøger at printe et folder tree over mine IMAP folders, men jeg kan simpelthen ikke få det til at virke..

Det skal stilles op på følgende måde

INBOX
  subfolder
  subfolder
      subfolder
          subfolder
      subfolder
  subfolder

og så videre.

Jeg har lavet følgende funktion:

function print_mailboxes($start = ""){

    global $mbox;
   
    $list = imap_getmailboxes($mbox, "{localhost:143/novalidate-cert}$start", "%");
   
    if (is_array($list)) {
        foreach ($list as $key => $val) {
          $name = str_replace("{localhost:143/novalidate-cert}$start", "", $val->name);
          print "&nbsp;&nbsp;&nbsp;&nbsp;".$name."<br>";
            if (!($val->attributes & LATT_HASNOCHILDREN)) {
                if($start = ""){
                    $next = $start . ".";
                   
                } else{
                    $next = $start;
                }
                print_mailboxes($next . $name);
            }
            echo "<br />\n";
        }
    }
}

og efter at have kørt dette:

imap_createmailbox($mbox, imap_utf7_encode("{imap.example.org}INBOX.Test"));
imap_createmailbox($mbox, imap_utf7_encode("{imap.example.org}INBOX.haha"));
imap_createmailbox($mbox, imap_utf7_encode("{imap.example.org}INBOX.Test.hehe"));
imap_createmailbox($mbox, imap_utf7_encode("{imap.example.org}INBOX.Test.hehe.huhu"));
imap_createmailbox($mbox, imap_utf7_encode("{imap.example.org}INBOX.miav"));

udskriver funktionen:

    INBOX
    .Test

    INBOX.miav

    INBOX.haha


Jeg sidder virkelig fast og kan ikke lige se hvordan jeg skal fortsætte.
Avatar billede jakobdo Ekspert
01. november 2007 - 17:19 #1
Problemet er din $start og $next bliver ikke husket fra gang til gang.
Du kan overveje at lave dem static?
Avatar billede danielss Nybegynder
01. november 2007 - 19:55 #2
Hmm jeg ved ikke helt hvordan det fungere.. kan du give et eksempel i koden?
Avatar billede danielss Nybegynder
01. november 2007 - 22:08 #3
Okey, det hjalp ikke kun at lave dem static, men det gav da lidt. Har fået den færdige funktion til at se sådan her ud:

<?php

function print_mailboxes($start = ""){

    global $mbox;
    static $tree,$name;
   
    $list = imap_getmailboxes($mbox, "{localhost:143/novalidate-cert}$start", "%");
   
    if (is_array($list)) {
        $space = "&nbsp;&nbsp;&nbsp;";
        foreach ($list as $key => $val) {
          $spaces = substr_count($start, ".");
          $spaces = str_repeat($space, $spaces);
          $name = str_replace("{localhost:143/novalidate-cert}".$start, "", $val->name);
          $name = str_replace(".", "", $name);
          $tree .= $spaces.$name."<br>";
            if (!($val->attributes & LATT_HASNOCHILDREN)) {
                if(empty($start)){
                    $next = $start;
                } else{
                    $next = $start . ".";
                }
                //print $next . $name . "<br>";
                print_mailboxes($next . $name);
            }
        }
    }
   
    return $tree;
   
}

?>
Avatar billede danielss Nybegynder
01. november 2007 - 22:09 #4
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester