PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

imap_getsubscribed> <imap_getacl
Last updated: Fri, 05 Sep 2008

view this page in

imap_getmailboxes

(PHP 4, PHP 5)

imap_getmailboxesListe les boîtes aux lettres, et retourne les détails de chacune

Description

array imap_getmailboxes ( resource $imap_stream , string $ref , string $pattern )

Liste les boîtes aux lettres.

Liste de paramètres

imap_stream

Un flux IMPA retourné par la fonction imap_open().

ref

ref ne devrait être que le serveur sous la forme décrite dans imap_open()

pattern

Spécifie la position dans la hiérarchie des boîtes aux lettres, où il faut commencer à chercher.

Il y a deux caractères spéciaux que vous pouvez utiliser dans pattern : '*' et '%'. '*' signifie : toutes les boîtes aux lettres. Si vous passez pattern comme '*', vous obtiendrez la liste complète des boîtes aux lettres de la hiérarchie. '%' signifie qu'on ne s'intéresse qu'au niveau courant. '%' passé à pattern ne retournera que les boîtes aux lettres de niveau supérieur; '~/mail/%'.Sous UW_IMAPD retournera toutes les boîtes aux lettres du dossier ~/mail directory, mais pas leurs enfants.

Valeurs de retour

Retourne un tableau d'objets contenant les informations sur les boîtes aux lettres. Chaque objet possède un attribut de name , qui contient le nom complet de la boîte aux lettres, delimiter qui est le délimiteur hiérarchique et attributes . attributes est un masque de bits, qui contient :

  • LATT_NOINFERIORS - Cette boîte aux lettres n'a pas d'"enfants" (il n'y a plus de boîtes aux lettres en dessous de celle-ci).
  • LATT_NOSELECT - Ceci est juste un container, pas une boîte aux lettres (vous ne pouvez pas l'ouvrir).
  • LATT_MARKED - Cette boîte aux lettres est marquée. Utilisé uniquement avec UW-IMAPD.
  • LATT_UNMARKED - Cette boîte aux lettres n'est pas marquée. Utilisé uniquement avec UW-IMAPD.

Exemples

Exemple #1 Exemple avec imap_getmailboxes()

<?php
$mbox 
imap_open("{imap.example.org}""username""password"OP_HALFOPEN)
      or die(
"Connexion impossible : " imap_last_error());

$list imap_getmailboxes($mbox"{imap.example.org}""*");
if (
is_array($list)) {
    foreach (
$list as $key => $val) {
        echo 
"($key) ";
        echo 
imap_utf7_decode($val->name) . ",";
        echo 
"'" $val->delimiter "',";
        echo 
$val->attributes "<br />\n";
    }
} else {
    echo 
"imap_getmailboxes a échoué : " imap_last_error() . "\n";
}

imap_close($mbox);
?>



imap_getsubscribed> <imap_getacl
Last updated: Fri, 05 Sep 2008
 
add a note add a note User Contributed Notes
imap_getmailboxes
razonklnbd at hotmail dot com
06-Jan-2008 09:49
i think it will save someones time to get mailbox list and their attributes within a formatted array

/********** Function ******************/
function getAttributesFlagArray($p_attributes){
    $attrs[LATT_HASNOCHILDREN]='false';
    $attrs[LATT_HASCHILDREN]='false';
    $attrs[LATT_REFERRAL]='false';
    $attrs[LATT_UNMARKED]='false';
    $attrs[LATT_MARKED]='false';
    $attrs[LATT_NOSELECT]='false';
    $attrs[LATT_NOINFERIORS]='false';
    $attrsX=$attrs;
    foreach($attrs as $attrkey=>$attrval){
        if ($p_attributes & $attrkey){
            $attrsX[$attrkey]='true';
            $p_attributes-=$attrkey;
        }
    }
    return $attrsX;
}

/*********** Usages *****************/
    $mboxconnstr='{imap.gmail.com:993/imap/ssl}';
//    $mboxconnstr='{mail.bdways.com:143/imap/novalidate-cert}';
    $mbox = imap_open($mboxconnstr, $username, $password, OP_HALFOPEN) or die("can't connect: " . imap_last_error());

    echo "<h1>Mailboxes</h1>\n";
    $folders = imap_getmailboxes($mbox, $mboxconnstr, "*");
    if(is_array($folders)){
        foreach($folders as $fkey=>$folder){
            $mapname = str_replace($mboxconnstr, "", imap_utf7_decode($folder->name));
            if($mapname[0] != ".") {
                //$attrs[LATT_]=': NO';
                $list_folders[$fkey]['name'] = $folder->name;
                $list_folders[$fkey]['nameX'] = $mapname;
                $list_folders[$fkey]['delimiter'] = $folder->delimiter;
                $list_folders[$fkey]['attributes'] = $folder->attributes;
                $list_folders[$fkey]['attr_values'] = getAttributesFlagArray($folder->attributes);
            }
        }
    }else echo "Call failed<br />\n";
    echo('<pre>'); print_r($list_folders); echo('</pre>');

thanks to Mohamed Abbas mabbas_xyz at yahoo dot com for his attributes findings using imap...
ned at wgtech d0t com
25-Jul-2007 10:07
Just to simplify what Mohamed Abbas said to get right to the heart of the matter:

You have 7 constants to test against:
LATT_NOINFERIORS, LATT_NOSELECT, LATT_MARKED, LATT_UNMARKED, LATT_REFERRAL, LATT_HASCHILDREN, and LATT_HASNOCHILDREN.

You do a bitmask test against attributes to test the value; in in PHPese:
if ($val->attributes & LATT_HASNOCHILDREN) {
    echo 'this has children';
}

Don't make it more complicated than you have to.
Mohamed Abbas mabbas_xyz at yahoo dot com
18-Nov-2006 05:51
i am currently develop a simple IMAP client, when i call imap_getmailboxes() i receive a different values in attributes property of the mailbox object the problem is how can i manipulate these attributes to get a meaningful value,
if you make a hard search to find a solution for this, you will
not find any useful documents for this problem, let us take a closer look for this problem.

when i call imap_getmailboxes() against different IMAP servers i got these attribute values

[attributes] => 9
[attributes] => 1
[attributes] => 64
[attributes] => 32
[attributes] => 40

the documentation tell us that we check this attributes against four constants, these contents are

LATT_NOINFERIORS
LATT_NOSELECT
LATT_MARKED
LATT_UNMARKED

the value of these constants are

LATT_NOINFERIORS = 1
LATT_NOSELECT = 2
LATT_MARKED = 4
LATT_UNMARKED = 8

you can got this result by echo each constant, unfortunately the documentation not explain how we can check the attributes against the constants, after a long time of searching i find the answer in source code of c-client
(you can get the source from ftp://ftp.cac.washington.edu/imap/)
under \src\c-client you will find mail.h open it and you will find this

                               /* terminal node in hierarchy */
#define LATT_NOINFERIORS (long) 0x1
                /* name can not be selected */
#define LATT_NOSELECT (long) 0x2
                /* changed since last accessed */
#define LATT_MARKED (long) 0x4
                /* accessed since last changed */
#define LATT_UNMARKED (long) 0x8
                /* name has referral to remote mailbox */
#define LATT_REFERRAL (long) 0x10
                /* has selectable inferiors */
#define LATT_HASCHILDREN (long) 0x20
                /* has no selectable inferiors */
#define LATT_HASNOCHILDREN (long) 0x40

as you notice here these are our four constants and three additional constants

LATT_REFERRAL
LATT_HASCHILDREN
LATT_HASNOCHILDREN

then what is the value of these 3 attributes
LATT_REFERRAL 0x10 = 00010000 in binary, the bitmask value is 2^4 = 16 and so on, or simply echo this constant to get the value, then

LATT_REFERRAL = 16
LATT_HASCHILDREN = 32
LATT_HASNOCHILDREN = 64

finally the full list of constants will be
LATT_NOINFERIORS = 1
LATT_NOSELECT = 2
LATT_MARKED = 4
LATT_UNMARKED = 8
LATT_REFERRAL = 16
LATT_HASCHILDREN = 32
LATT_HASNOCHILDREN = 64

ok let's back to our attributes
[attributes] => 9
[attributes] => 1
[attributes] => 64
[attributes] => 32
[attributes] => 40

[attributes] => 9 this mean it's LATT_UNMARKED and LATT_NOINFERIORS 1+8 =9

[attributes] => 1 this mean LATT_NOINFERIORS

[attributes] => 64 this mean LATT_HASNOCHILDREN

[attributes] => 32 this mean LATT_HASCHILDREN

[attributes] => 40 this mean LATT_HASCHILDREN and LATT_UNMARKED 32+8=40

this just like linux file permission 7 mean read, write, and execute 4+2+1 read=4 write=2 execute=1

that is what i found, i hope this can help

Mohamed Abbas
Nileweb Egypt
emielbom at hotmail dot com
04-Feb-2006 04:09
i was looking for a function to test the attributes.
and it was hard to find an answer or code.

Maybe there is a function availeble, but i couldn't find it.

the first function: returns all mailboxes in on the server

The second function: returns a bitstring from the attr_number returned by getmailboxes()

The tirth function: returns an array with the active attributes on the specific mailbox

Last Line: is a combination of the functions: the output is, any map witch can hold no mail but only sub boxes...

function getFolders($mailbox, $serverString) {

    $list = imap_getmailboxes($mailbox, $serverString, "*");
    if (is_array($list)) {
        foreach ($list as $key => $val) {
           $mapname = str_replace($serverString, "", imap_utf7_decode($val->name));
           if ($mapname[0] != ".") {
               $list_folders[$key]['name'] = $mapname;
               $list_folders[$key]['delimiter'] = $val->delimiter;
               $list_folders[$key]['attributes'] = $val->attributes;
           }
           
        }
    } else {
        echo "imap_getmailboxes failed: " . imap_last_error() . "\n";
    }

    return $list_folders;
}

function IntToBin($number) {
    $BitWaarde = 1;
    $IntNum = $number;
    $BinString = "";

    if ($IntNum > 0) {
    
        // bepaal de max bitwaarde aan de hand van $IntNum
        while ($IntNum > $BitWaarde) {
            $BitWaarde = $BitWaarde * 2;
        }
    
    
    
        // maken van een binaire string.
        while ($BitWaarde >= 1 ) {
            if ($IntNum < $BitWaarde) {
                if ($BinString != "") $BinString .= "0";
            } else {
                $BinString .= "1";
                $IntNum = $IntNum-$BitWaarde;
            }
            $BitWaarde = $BitWaarde / 2;
        }
   
    }
   
   
    return $BinString;
}

function Attributes($BinString) {

    $BinInt = (int)$BinString;
    if ($BinInt >=1000){
        $setAttribute['LATT_UNMARKED'] = true;
        $BinInt = $BinInt-1000;
    } else $setAttribute['LATT_UNMARKED'] = false;

    if ($BinInt >=100){
        $setAttribute['LATT_MARKED'] = true;
        $BinInt = $BinInt-100;
    } else $setAttribute['LATT_MARKED'] = false;
   
    if ($BinInt >=10){
        $setAttribute['LATT_NOSELECT'] = true;
        $BinInt = $BinInt-10;
    } else $setAttribute['LATT_NOSELECT'] = false;
   
    if ($BinInt >=1){
        $setAttribute['LATT_NOINFERIORS'] = true;
        $BinInt = $BinInt-1;
    } else $setAttribute['LATT_NOINFERIORS'] = false;

    return $setAttribute;
}

foreach (getFolders($mailbox, $config['Server_string']) as $key => $val) {
                        $Attr = Attributes(IntToBin((int)$val['attributes']));
                        if (!$Attr['LATT_NOINFERIORS']) {
                            echo "<option value='".$val['name']."'>".$val['name']."</option>";
                        }
                    }
ad-rotator.com
04-May-2004 10:17
In case you print_r() or var_dump() the object and see an int for attribute, these are the constant integers for the bitmask.

1 LATT_NOINFERIORS
2 LATT_NOSELECT
4 LATT_MARKED
8 LATT_UNMARKED
foom at fuhm dot NO_supercalifragilisticexpialidocious_SPAM dot net
28-Aug-2001 02:42
The list of mailbox attributes in this document is very misleading. In particular the explanation of noinferiors is just wrong. It does not mean that the mailbox currently has no children, it means that it *cannot* have children ever. Also, it is untrue that marked and unmarked are only used by UW-IMAP. They are in the official IMAP specification and are used by at least Courier-imap as well.

One thing to watch out for, however, is broken IMAP servers which do send \Noinferiors when they mean that there are currently no children.

From the IMAP4rev1 specs (RFC 2060):
      \Noinferiors

         It is not possible for any child levels of hierarchy to exist
         under this name; no child levels exist now and none can be
         created in the future.

      \Noselect

         It is not possible to use this name as a selectable mailbox.

      \Marked

         The mailbox has been marked "interesting" by the server; the
         mailbox probably contains messages that have been added since
         the last time the mailbox was selected.

      \Unmarked

         The mailbox does not contain any additional messages since the
         last time the mailbox was selected.

imap_getsubscribed> <imap_getacl
Last updated: Fri, 05 Sep 2008
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites