(PHP 4, PHP 5, PHP 7, PHP 8)
imap_getmailboxes — Читает список почтовых ящиков и возвращает подробную информацию о каждом из них
Функция получает информацию о почтовых ящиках.
imapreference
Обычно значение параметра reference
должно содержать только спецификацию сервера,
как описывает страница функции imap_open() .
Передача в этот параметр непроверенных данных небезопасна, если включили директиву imap.enable_insecure_rsh.
patternpattern
перадают два специальных символа: '*' и '%'.
Символ '*' означает возврат всех почтовых ящиков. Если передать
параметр pattern как '*', возвращается полный список иерархии почтовых ящиков.
Символ '%' означает возврат только текущего уровня.
Символ '%' как значение параметра pattern вернёт почтовые ящики
только верхнего уровня; с серверов UW_IMAPD значение '~/mail/%'
вернёт почтовые ящики каталога ~/mail,
но не подкаталогов этого каталога.
Функция возвращает массив объектов, которые содержат информацию о почтовых ящиках.
Каждый объект содержит свойства: name, которое указывает
полное имя ящика; delimiter,
которое содержит разделитель для той части иерархии, в которой
содержится ящик; и attributes.
Параметр Attributes — битовая маска
из следующих констант:
LATT_NOINFERIORS — Ящик не содержит и не может содержать
«потомков», то есть содержать вложенные ящики. Вызов функции
imap_createmailbox() не будет работать для этого ящика.
LATT_NOSELECT — Это только контейнер, а не почтовый ящик.
Его нельзя открыть.
LATT_MARKED — Этот ящик помечен. Означает, что в ящике могут
быть новые письма, которые появились с момента последней проверки. Работает не со всеми
серверами IMAP.
LATT_UNMARKED — Этот ящик не помечен, то есть в ящике нет
новых писем. Если выставлен флаг MARKED или
UNMARKED — считается, что сервер поддерживает
этот функционал.
LATT_REFERRAL — Этот контейнер имеет направления (referral) на удалённый почтовый ящик.
LATT_HASCHILDREN — У этого почтового ящика есть выбираемые подчинённые (inferiors).
LATT_HASNOCHILDREN — У этого почтового ящика нет выбираемых подчинённых (inferiors).
false , если возникла ошибка.
| Версия | Описание |
|---|---|
| 8.1.0 |
Параметр imap теперь принимает объект IMAP\Connection ;
раньше параметр ждал ресурс (resource ) 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 завершился с ошибкой: " . imap_last_error() . "\n";
}
imap_close($mbox);
?>
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 EgyptThe 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.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