PHPのお勉強!

PHP TOP

imap_getmailboxes

(PHP 4, PHP 5, PHP 7, PHP 8)

imap_getmailboxesメールボックスのリストを読み込み、各ボックスに関する詳細な情報を返す

説明

imap_getmailboxes(IMAP\Connection $imap, string $reference, string $pattern): array|false

メールボックスの情報を取得します。

パラメータ

imap

IMAP\Connection クラスのインスタンス。

reference

通常、referenceimap_open() で述べられているサーバー定義です。

警告

信頼できないデータをこのパラメータに渡すのであれば、 imap.enable_insecure_rsh を無効にしておかなければ危険です。

pattern

検索を開始するメールボックスの階層を指定します。

pattern の中で使用できる特別な文字として '*' および '%' があります。 '*' は、すべてのメールボックスを意味します。 pattern に '*' を指定すると、 メールボックス階層全体のリストが得られます。 '%' は現在のレベルのみを意味します。 '%' を pattern に指定すると、 トップレベルのメールボックスのみを返します。UW_IMAPD の場合、 '~/mail/%' は ~/mail ディレクトリ内のすべてのメールボックスを返しますが、 そのディレクトリのサブフォルダにあるメールボックスは返しません。

戻り値

メールボックス情報を有するオブジェクトの配列を返します。各オブジェクトには、 メールボックスの完全な名前である name、 このメールボックスの階層の区切りを示す属性 delimiter、 そして attributes が存在します。 attributes はビットマスクであり、 次のものについて調べることができます。

  • LATT_NOINFERIORS - このメールボックスには 「子供」がいないか、またはいないかもしれません(このボックスの中にメールボックスはありません)。 このメールボックスに対して imap_createmailbox() をコールしても動作しません。

  • LATT_NOSELECT - 単なるコンテナであり、 メールボックスではありません - これをオープンすることはできません。

  • LATT_MARKED - このメールボックスにはマークがつけられています。 これは、最後に確認したとき以降に新たなメッセージが到着しているかもしれないということを意味します。 すべての IMAP サーバーがこの機能を提供しているとは限りません。

  • LATT_UNMARKED - このメールボックスにはマークがつけられておらず、 新たなメッセージを含んでいません。 MARKED あるいは UNMARKED が提供されている場合は、 その IMAP サーバーがこのメールボックスに対してマーク機能を提供しているとみなせます。

  • LATT_REFERRAL - このコンテナはリモートメールボックスと関連を持ちます。

  • LATT_HASCHILDREN - このメールボックスは選択可能な子を持ちます。

  • LATT_HASNOCHILDREN - このメールボックスは選択可能な子を持ちません。

この関数は、失敗した時に false を返します。

変更履歴

バージョン 説明
8.1.0 引数 imap は、IMAP\Connection クラスのインスタンスを期待するようになりました。 これより前のバージョンでは、有効な imap リソース が期待されていました。

例1 imap_getmailboxes() の例

<?php
$mbox
= imap_open("{imap.example.org}", "username", "password", OP_HALFOPEN)
or die(
"接続できません: " . 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 failed: " . imap_last_error() . "\n";
}

imap_close($mbox);
?>

参考

add a note

User Contributed Notes 3 notes

up
13
Mohamed Abbas mabbas_xyz at yahoo dot com
18 years ago
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
up
5
foom at fuhm dot NO_supercalifragilisticexpialidocious_SPAM dot net
23 years ago
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.
up
1
ad-rotator.com
20 years ago
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