IMAP, РОРЗ и NNTP

Для того чтобы использовать следующие функции, необходимо перекомпилировать РНР с параметром --with-imap (для этого клиентские библиотеки С должны быть установлены). Последнюю версию для компиляции можно загрузить с ftp://ttp.cac.washington.edu/imap/. Можно также подключить модуль динамически.
Несмотря на имя модуля, имеющиеся в нем функции позволяют выполнять также много других полезных операций, выходящих за рамки простого использования протокола IMAP. Лежащая в основе библиотека С-клиента также поддерживает NNTP, РОРЗ и методы доступа к локальным почтовым ящикам.
Чтобы разобраться в том, что позволяют делать функции, полезно ознакомиться (. перечисленными ниже документами RFC.

  • RFC821: Simple Mail Transfer Protocol (SMTP).
  • RFC822: Стандарт текстовых сообщений Интернет ARPA.
  • RFC2060: Internet Message Access Protocol (IMAP) Version 4 revl.
  • RFC1939: Post Office Protocol Vei.sion 3 (РОРЗ).
  • RFC977: Network News Transfer Protocol (NNTP).
  • RFC2076: Common Internet Message Headers.
  • RFC2045, RFC2046, RFC2047, RFC2048 и RFC2049: Multipurpose Internet Mail Extensions (MIME).

Детальное рассмотрение функционирования систем работы с электронной почтой можно найти в книгах: «Programming Internet Email» (David Wood) и «Managing IMAP» (Dianna Mullet и Kevin Mullet).
Далее под ящиками подразумеваются как папки верхнего уровня, так и вложенные.
imap_open
Подключение к серверу (открытие почтового ящика)
int imap_open (string mailbox, string username, string password [, int flags])
Возвращает дескриптор открытого почтового ящика IMAP (дескриптор подключения к серверу IMAP) или значение FALSE при ошибке. Эту функцию можно также использовать для подключения к серверам РОРЗ и NNTP, но некоторые функции будут недоступны.
В аргументе mailbox указывается имя сервера и путь к почтовому ящику. Имя сервера заключается в фигурные скобки «{» и «}», и состоит из: имени сервера (или его IP-адреса), возможного указания протокола (начинающегося со слеша '/') и необязательного значения номера порта подключения (начинающегося с двоеточия «:»). Имя сервера необходимо указывать всегда; бывает полезно указывать имя сервера в переменной, но следует учитывать, что фигурные скобки имеют специальное значение для переменных в строках в двойных кавычках, поэтому открывающую скобку следует предварять слешем, например: "\{$SERVER/pop3:110}INBOX".
Специальное значение — имя INBOX, обозначающее основной ящик пользователя (папка Входящие). Если имя ящика включает какие-либо символы помимо английских печатных ASCII, то их нужно закодировать функцией imap_utf7_encode(). Разделителем иерархии почтовых ящиков обычно является слеш, но для некоторых серверов им также может быть точка, например: «INBOX. Current. Important. Work».
Аргументами username и password указываются имя и пароль пользователя.
В аргументе flags указываются параметры открытия в виде битовой маски):

  • OP_READONLY — открыть только для чтения;
  • OP_ANONYMOUS — не использовать (обновлять) разделы новостей .newsrc (только для NNTP);
  • OP_HALFOPEN — для IMAP- и NNTP-имен: только подключение без открытия ящика;
  • CL_EXPUNGE — автоматически удалить ящик при его закрытии.

(См. также: imap_delete() и imap_expunge()).
Для подключения к серверу ШАР, использующему порт 143 на локальной машине, используйте:
$mbox = imap_open ("{localhost:143}INBOX".
"user_id". "password");
Для подключения к серверу РОРЗ, использующему порт 110 на локальной машине, используйте:
$mbox = imap_open
("{localhost/pop3:110}INBOX". "user_id".
"password").
Для подключения к серверу NNTP, использующему порт 119 на локальной машине, используйте:
$nntp = imap_open ("{localhost/nntp:119}
comp test". "". "");
Следующий пример демонстрирует подключение к серверу ШАР «your.imap.host» и вывод имеющихся ящиков и сообщений для пользователя «username».
$mbox = imap_open ("{your imap.host:143}",
"username". "password").
echo "<р><h1>Ящики Mailboxes</hl>\n".
Sfolders = imap_ilstmailbox (Smbox.
"{your.imap.host:143}". "*"):
if (Sfolders == FALSE) echo
"Ошибка- ящиков не обнаружено
<br>\n": else while (list ($key. Sval)
= each (Sfolders)) echo "\t Sval <br>\n".
echo "<р><h1>Сообщения в INBOX</hl>\n"
. Sheaders = imapjieaders (Smbox);
if (Sheaders == FALSE) { echo
"Ошибка - сообщений нет <br>\n";
} else while (list (Skey.Sval) =
each (Sheaders)) echo "\t Sval <br>\n";
imap_close(Smbox):
В общем случае должно быть выведено нечто вроде следующего:
Ящики Mailboxes
{localhost:143} l innn/i gf<br>
{loca lhost;143} linnn<br>
{local host:143}INBOX<br>
Сообщения в INBOX
ШЗ-Мау-2001 Имя Отправителя
Заголовок (1621 chars)<br>
imap_reopen
Переподключение (выбор другого ящика)
int imap_reopen (int imap_stream, string mailbox [, string flags])
Функция подобна imap_open() с тем отличием, что она не создает новый дескриптор подключения, а использует уже существующий imap_ stream (имя пользователя и его пароль не изменяются). Аргументы mailbox и flags аналогичны.
Возвращает TRUE или FALSE — при ошибке.
imap_close
Отключение от сервера
int imap_close (int imap_stream [, int flags])
Функция закрывает поток подключения, связанный с дескриптором imap_stream. Если в аргументе flags указывается значение CL_EXPUNGE, то при закрытии ящика из него автоматически удаляются все сообщения, помеченные к удалению.
imap_ping
Проверка активности подключения
int imap_ping (int imap_stream)
Возвращает TRUE, если подключение действительно, или FALSE, если оно разорвано.
Вызов функции может использоваться для обнаружения свежих сообщений и для поддержания активности связи с серверами, разрывающими связь через определенный промежуток времени бездействия соединения. Но так как время исполнения сценария ограниченно (обычно полминуты), а время разрыва связи наступает через сравнительно длительный период (часто 30 минут), то едва ли эта функция будет полезна в web-сценариях.
imap_listmailbox
Получение списка почтовых ящиков
array imapjistmailbox (int imap_stream, string ref, string pattern)
Возвращает массив имен почтовых ящиков. Описание аргументов см. в imap_getmailboxes().
$mbox = imap_open("{your imap host}".
"username"."password",OP_HALFOPEN)
dieC'can't connect- ".tmap_last_error()):
Slist " imap_listmailbox($mbox,
"{your.imap host}"."*"):
ifOs_array($list)) { reset ($"hst):
while (list($key. $val) = each(Slist))
print imap_utf7_decode($val).
"<br>\n". } else
print "imap_listmailbox failed "
imap_last_error(). "\n".
imap_close($mbox):
imap_getmailboxes
Получение описания почтовых ящиков
array imap_getmail boxes (int imap_stream, string ref, string pattern)
Возвращает массив объектов, содержащих описания каждого ящика. Каждый объект имеет 3 атрибута: полное имя ящика папе, символ-разделитель иерархии ящиков delimiter и битовое поле attributes, которое может состоять из следующих компонентов:

  • LATT_NOINFERIORS (1) — ящик не имеет вложенных;
  • LATT_NOSELECT (2) — ото контейнер (а не ящик) и его нельзя открыть;
  • LATT_MARKED (4) — ящик маркирован. Используется только с UW-IMAPD;
  • LATTJJNMARKED (8) — ящик маркирован. Используется только с UW-IMAPD.

Имена ящиков могут содержать символы национальных алфавитов (из набора ASCII), которые могут быть закодированы и затем декодированы функцией imap_utf7jJecode().
Аргумент ref должен содержать обычную спецификацию сервера (его адреса), как в функции imap_open(), а аргумент pattern — указывать, с какого ящика начинать и шаблон для возвращаемых ящиков.
В аргументе pattern могут быть указаны два специальных значения: «*» означает, что следует возвращать всю иерархию ящиков, а <<%>> -только текущий иерархический уровень (без вложенных ящиков).
$mbox = imap_open("{your шар.host}",
"user-name", "password".OP_HALFOPEN)
|| dieC'can't connect: ".imap_last_error()).
$list = imap_getmailboxes($mbox.
"{your.imap.host}"."*"):
ifds_array($list))
{ pnnt_r (Slist): } else
print "imap_getmailboxes failed
".imap_last_error()."\n":
imap_close($mbox).
См. также imap_getsubscribed().
imap_createmailbox
Создание почтового ящика
int imap_createmailbox (int imap_stream, string mbox)
Имя создаваемого ящика указывается в аргументе mbox. Имена, содержащие национальные символы, должны кодироваться функцией imap_utf() encode().
Возвращает TRUE или FALSE — при ошибке.
См гакжс: imapj-enamemailbox(), imap_deletemanbox() и imapj>pen().
$mbox = imap_openf"(your imap.host}"
."username"."password",OP_HALFOPEN)
|| chet"can't connect. "
.imap_last_error()).
$namei = "newhox:
$name2 = imap_utf7_encode
("MOй личный ящик");
if(&imap_createmai1box(Smbox.
1map_utt7_encode("{your.imap.host}
INBOX/$namer))) { Sstatus =
@imap_status($mbox."{your.imap
host}:NBOX/$naoiel".SA_ALL);
if($btat'js) { echo "Статус нового
ящика 'Snamel': <br\n".
"Messages: ". $status->messages
."<br>\n". "Recent: ". $status->
recent "<br-\n". "Unseen:
". $status->unseen "<br>\n".
"UIDnext ". $status->uidne/.t .
"<Dr>»n". "UIDvalnaity ".
Sstatus->uldval1d1ty.".<br>\n"; if
(imap_renamemailbox($mbox "{your,
irnao host)INBOX/Snamel".
"{your.-imap host}lNBOX/$name2'l)
{ echo "Ящик Sramel' переименован
в '$raine2'<br>\n": } else {
print "imap_renamemailbox failed:
" imap_last_error() "<br>\n": i
} else { pnnt "i:nap_s"'atus tailed.
" inap_labt_error() "<br>'n"-}
if(?imap_deletemailbox(Smbox.
"{your imap.host}INBOX/$naire2")i
{ print "new mailbox removed <br>\n":
} else { print "lmap_deletemailbox
failed: ". implode("<br>\n".
lroap_errors()3 "<br>\n", i }
ebe { print "could not
create new mailbox- ".
implodeC"<br>\n".imap_errors()).
"<br>\n":
imap_clcse($iTibox);
imap_ renamemailbox
Переименование ящика
int imap_renamemailbox (int imap_stream, string oldjnbox, string new_rabox)
Имя ящика задается аргументом oldjnbox, а его новое имя — new_ mbox Формат этих аргументов см. в описании функции imap_open(). Пример использования см. в функции imap_createmailbox().
Возвращает TRUE или FALSE — при ошибке.
См. также: imap_createmailbox(), imap_deletemailbox(), imap_open().
imap_ deletemaiibox
Удаление почтового ящика
int imap_deletemailbox (int imap_stream, string mbox)
Имя ящика задается аргументом mbox, его формат см. в описании функции imap_open(). Пример использования см. в функции imap_ createmailbox().
Возвращает TRUE или FALSE — при ошибке.
См. также: imap_createmai1box(), imap_renamemailbox() и imap_open().
imap_ check
Проверка текущего ящика
object imap_check (int imap_stream)
Возвращает объект, содержащий информацию о текущем почтовом ящике, или FALSE при ошибке. В объекте имеются следующие свойства:

  • Date — время последней модификации содержимого ящика (доступа);
  • Driver — протокол доступа к ящику: POPS, IMAP, NNTP;
  • Mailbox — полное имя почтового ящика;
  • Nmsgs — число сообщений в ящике;
  • Recent — число новых сообщений в ящике.

$mbox - imap_open('{localhost}°."igor"."lgx324879".
OP_HALFOPEN) || dle("can't connect:
".imap_last_error()):
pnnt_r(imap_check ($mbox));
imap_close($mbo/).
Выводит нечто подобное следующему:
$tdClass Object
[Date] => Sun. 13 May 2008
14-31:38 +0400 (Московское время
(лето))
[Driver] -> imap
[Mailbox] => {igor 143/imap/user="igor"}
<no_mailbox>
[Nmsgs] => 0
[Recent] 0
imap_status
Получение статуса указанного ящика
object imap_status (int imap_stream, string mailbox, int options)
Возвращает объект, содержащий информацию о почтовом ящике с именем mailbox, пли FALSE при ошибке. В объекте возвращаются свойства, в зависимости от указанного значения аргумента options:

  • SA_MESSAGES — возвратить в status ->messages общее число сообщений в ящике;
  • SA_RECENT — возвратить в status->recent число новых сообщений;
  • SAJJNSEEN — возвратить в status->unseen число непрочитанных сообщений;
  • SAJJIDNEXT — возвратить в status->uidnext номер uid для следующего нового сообщения;
  • SAJJIDVALIDITY - возвратить в status->uidvalidity константу действительности uid ящика;
  • SA_ALL — возвратить все вышеперечисленное.

Объект также содержит свойство status-^flags, отражающее (в объединенном битовом поле), с какими параметрами он создан.
$mbox = шар_ореп("{your.imap host}".
"ucename"."password".OP HALFOPEN)
|| dieC'can't connect: " nmap_last_error!));
$status = imap_status(Smbox."{your
imap host}INBOX".SA_ALL).
if($status) { print_r($status); }
else print "imap_status failed "
imap_lasterror()."\n":
imap_clcse($mbox)
imap_ mailboxmsginfo
Получение информации о текущем ящике
object imapjnailboxmsginfo (int imap_stream)
функция сходна с imap_status(), но дополнительно она вычисляет 0С,-рем всех сообщений, находящихся в ящике. Свойства возвращаемого объекта:

  • Date — время последней модификации;
  • Driver — драйвер (протокол доступа);
  • Mailbox — имя почтового ящика;
  • Nmsgs — число сообщений;
  • Recent — число новых полученных сообщений;
  • Unread — число непрочитанных сообщений;
  • Deleted — число удаленных сообщений;
  • Size — размер почтового ящика.

<?рhp
$mbox = imap_open
("{your imap.host}INBOX".
"user-name",
"password") || diet"can't connect:
".imap_last_error()):
rebeck = imapinallboxmsginfo
($fnbox);
lf($6heck) {
print "Date; " . $check->Date .
"<br^\n" print "Driver:
" . $check->Driver ."<br>\n"
print "Mailbox: "
. $check->Mailbox ."<br>\n" :
print "Messages- "
. $check->Nmsgs ."<br>\n"
print "Recent: " .
$check->Recent ."<br>\n"
print "Unread: " . $check->Unread
"<br>\n" print "Deleted: "
. $check->Deleted ,"<br>\n" :
print "Size: " $check->Size ."<br>\n"
} ele ( print "imap_check()
failed- ".imap_last_error().
"<br>\n": } linap^close
($mbox). >
imap_num_msg
Получение числа сообщений в текущем ящике • nt imap_num_msg (int imap_stream)
imap_num_recent
Получение числа новых сообщений в текущем ящике
int imap_num_recent (nnt imap_stream)
imap_listsubscribed
Получение списка активных ящиков
array imap_listsubscribed (Int imap_stream, string ref, string pattern)
У пользователя может быть сложная структура папок почтовой учетной записи, но, как правило, для синхронизации и отображения в программе почтового клиента выбираются только несколько (а к остальным обращения не происходит).
Функция возвращает в массиве перечисление имен папок, выбранных для синхронизации. Она аналогична функции iraap_listmailbox().
imap_getsubscribed
Получение описания активных ящиков
array imap_getsubscribed (int imap_stream, string ref, string pattern)
Функция подобна imap_getmai"lboxes(), но она возвращает только имена тех ящиков, которые были выбраны для синхронизации.
imap_ subscribe
Активизация ящика
int imap_subscribe (int imap_stream, string mbox)
В дальнейшем ящик будет использоваться для синхронизации. Возвращает TRUE иди FALSE — при ошибке.
imap_ unsubscribe
Дезактивизация ящика
int imap_unsubscribe (int imap_stream, string mbox)
imap_ search
Поиск в текущем ящике
array imap_search (int imap_stream, string criteria, int flags)
Функция возвращает список почтовых ящиков (поиск проходит рекурсивно в текущем ящике), в которых было обнаружено соответствие критерию, указанному в аргументе criteria. В строке критерия указываются искомые слова, разделенные пробелами; если необходимо искать фразу, се следует заключать в двойные кавычки; перед набором слов указывается имя поля (можно также указать флаги просматриваемых сообщений), в котором следует производить поиск. Возможно указывать следующие ключевые слова:

  • ALL— все соoбщения, содержащие перечисленные слова;
  • ANSWERED — только сообщения, на которые был выслан ответ;
  • ВСС "string" — «екать "string" в поле Вcс;
  • Before "date — сообщения, датированные ранее "date";
  • Body "string" — сообщения, содержащие в своем теле "string";
  • СС "string" — искать "string" в поле Сс;
  • Deleted — удаленные сообщения;
  • Flagged — сообщения со статусом «Важное»;
  • FROM "string " — искать "string" в поле From;
  • KEYWORD "strinп" — искать сообщения, содержащие слово "string";
  • NEW — просматРивать только новые сообщения;
  • Old — проСматривать только старые сообщения;
  • On date — просматривать сообщения, датированные "date";
  • RFCFNT — просматривать свежие сообщения (с флагом \\RECENT); ссси „посматривать прочитанные сообщения ;
  • Since "date" — просматривать сообщения, датированные позже "date";
  • Subject "string" — искать "string" в поле темы Subject:;
  • TFXT "string" — искать сообщения, содержащие текст "string";
  • To string — искать сообщения, содержащие "string" в поле адреса;
  • UNANSWERED — пРoсматРивать сообщения, на которые не был написан ответ;
  • UNDFI FTED — просматривать неудаленные сообщения;
  • UNFI АГ6ЕО — пРосматРивать сообщения без флагов;
  • UNKEYWORD "sttring" — искать сообщения, не содержащие слово "string";
  • UNSEEN — просматривать непросмотренные сообщения.

Например, чтобы найти все сообщения от отправителя Peter, на которые не был выслан ответ, указывается: UNANSWERED FROM Peter.
imap_scanmailbox
Поиск текста в сообщениях
array imap_scanmailbox (int imap_stream, string ref,
string pattern, string content)
функция подобна imapJistmailbox(), но она возвращает имена только тех ящиков, которые содержат в себе строку content.
imap_fetch_overview
Получение описания сообщений
array imap_fetch_overview (int imap_stream, string sequence [, int flags])
Возвращает в массиве объекты, содержащие информацию о сообщениях, номера которых перечислены в строке sequence. Эта строка должна содержать номер или номера через запятую без пробелов; можно указать диапазон разделителем «двоеточие» (:). Если в значении аргумента указана константа FTJJID, это указывает на то, что номера являются уникальными идентификаторами UID.
Каждый объект массива может иметь следующие свойства:

  • subject — тема сообщения;
  • from — отправитель;
  • date — дата отправки;
  • message_id — Message-ID;
  • references — ссылки на message_id;
  • size — размер в байтах;
  • uid — уникальный идентификатор сообщения UID в ящике;
  • msgno — порядковый номер сообщения в ящике;
  • recent — присутствие флага «новое»;
  • flagged — присутствие флага «важное»;
  • answered — присутствие флага «ответ написан»;
  • deleted — пометка сообщения к удалению;
  • seen — прочитанное сообщение;
  • draft — присутствие флага «черновик».

Smbox = imap_open("{your л map host:143}".
"username","password") cheC'can't connect:
" .imap_last_error()):
$overview = imap_fetch_overview($mbox."2,4 6",0).
if(is_array($overview)) { pnnt_r($overview): }
imap close($mbox):
Выводится информация следующего вида:
Array
[0] => stdClass Objecl
[subject] -> ПроРавление
[from] => IG <ig<^or>
[date] > Sun 10 May 2001
01-41^°0 +»400 [message_id] ->
^(100801c0db2c$3c46a2cO
$0100007f(aigor>
[S1ze] => 1621
[uid] -> 2897036J
[msgno] => 1
[recent] => 0
[flagged] => 0
[answered] ==> 0
[deleted] => 0
[seen] => 1
[draft] -> 0
)
imap_ headers
Получение списка сообщений текУЩего ящика
array iroapjieaders (int imap_Streara)
Возвращает массив, соДержащий заголовки имеющихся сообщений. Сообщения вложенных папок не просматриваются.
См. пример в функции imap_open().
imap_header
Синоним функции imap_headerinfo
object imapjieader (int stream, int msgjiumber , int fromlength subjectlength , string defaulthost]]])
imap_headerinfo
Просмотр заголовка сообщенИя
object imap headerinfo (imap_stream, int msg_number)
int fromlength [, int Subjectlength [. string defaulthost]]])
Возвращает объект, содержащии различные элементы информации о сообщении.
$mbox = imap_open
'\{$SERVEf/p°P3- HOJINBOX". "lgor7".
Г1дх32Г);
pnnt_r(imap_header($mbox.l)'
Будет выведено примери" следующее:
stdClass Object (
[date] => Sun. 13 May
2005 01:41:00 +0400 [Date] >
Sun. 13 May 2005 01-41:00 +0400 [subject]
=> Послание [Subject] => Послание
[messagejd] =>
<000801cOdb2c$3c46a2c
O$0100007f@igor> [toaddress] ->
igor@loca]host [to] => Array (
[0] => swClass Object (
[mailbox] -> igor [host] =>
local host ) ) [fromaddress] =>
IG <ig@igor.^ [from] => Array (
[0] -> stddass Object (
[personal] => IG [mailbox] => ig [host] =>
Igor. ) )
[reply_toaddress] =>
IG <тд1?тдог.> [reply_to] => Array (
[0] -> stddass Object (
[personal] => IG [mailbox] =>
ig [host] => igor. )
[senderaddress] ->
IG <ig(?igor.> [sender] -> Array (
[0] -> stddass Ob.iect i
[personal] => IG
[mailbox] => ig [hnbt] -> igor ) )
[Recent] > N [Unseen] =>
[Flagged] => [Answered] =>
[Deleted] => [Draft] => [Msgno] => 1
[MailDate] =>
13 May-2005 01:41:00
+0400 [Size] => 1581 [udate] =>
9S9703660 )
В объекте, как вы можете видеть, возвращаются следующие значения:

  • Идентификационная информация: date, Date, subject, Subject, message^ I id, Msgno, Mai IDate, Size, udate.
  • Адресная информация: toaddre^s, to (mailbox, host), fromaddress, from (personal, mailbox, host), replyjtoaddress, reply_to (personal, mailbox, host), senderaddress, sender (personal, mailbox, host).
  • Значения флагов: Recent. Unseen, Flagged, Answered, Deleted, Draft.

Структура и формат записей определяются реализацией серверного интерфейса и могут сильно различаться для разных систем (единственный способ выяснить это — проверить на практике). В большинстве случаев для сообщений протоколов ШАР, РОРЗ и NNTP форматы информационных полей идентичны.
Для news-сообщений дополнительно возвращается свойство newsgroup.
Пары полей date, Date и subject, Subject обычно совпадают. В message_ id хранится уникальный хеш сообщения (идентификатор UID), а в Msgno - относительный порядковый. В записях Size и udate возвращается соответственно размер сообщения в байтах и время в формате UNIX Timestamp.
Адресная информация возвращается как в целостном, так и разделенном па составляющие виде. В большинстве случаев адреса fromaddress, reply_toaddress и senderaddress совпадают. Если у сообщения имеется поле Сс: (отправить копии вторичным получателям), то также возвращается адрес ccaddress.
Флат сообщения соответственно обозначают: только что пришедшее сообщение, непрочитанное сообщение, помеченное как «Важное», сообщение на которое был написан ответ, сообщение, маркированное к удалению, и черновик сообщения.
Три дополнительных аргумента используются редко.
imap_sort
Сортировка заголовков
array imap_sort (int stream, int criteria, int reverse, int options) Возвращает массив номеров сообщений, сортированных по критерию.
Если в аргументе reverse указывается значение, то происходит обратная сортировка.
В аргументе criteria можно указывать одно из следующих значений:

  • SORTDATE — по дате сообщения;
  • SORTARRIVAL — по дате получения;
  • SORTFROM — по первому адресу в поле From;
  • SORTSUBJECT — по строке темы в поле Subject:;
  • SORTTO — по первому адресу в поле То;
  • SORTCC — по первому адресу в поле получателей копии Сс;
  • SORTSIZE - но размеру сообщения в октетах.

Флаги options аргумента могут (побитово) включать следующие значения:

  • SEJJID — возвращать уникальный идентификатор сообщения UID вместо сто порядкового номера;
  • SE NOPREFETCH — не выполнять с сообщением предварительные манипуляции.

imap_fetchstructure
Получение полной информации о сообщении
object. imap_fetchstructure (int iraap_streara, int msgjiumber [, int flags])
Информация возвращается в объекте, она описывает формат и структуру сообщения в текущем ящике, указанном порядковым номером msgjiumber. Если в аргументе flags указывается значение FTJJID. это свидетельствует о том, что в аргументе msgjiumber указан не номер сообщения, а его идентификатор UID.
В объекте присутствуют следующие объекты (его структура сильно варьируется):

  • type — тип основного тела сообщения;
  • encoding — кодировка тела сообщения;
  • if subtype — True, если имеется вложенный тип;
  • subtype — вложенный тин MIME;
  • ifdescription — True, если имеется строка описания;
  • description — строка описания;
  • if id — True, если имеется строка идентификации;
  • id — строка идентификации;
  • lines — размер в строках;
  • bytes — размер в байтах;
  • ifdisposition — True, если имеется строка размещения;
  • disposition - строка размещения;
  • ifdparameters — True, если имеется массив dparameters;
  • dparameters — массив d-параметров (объектов, где каждый вложен-I ный объект состоит из пар «атрибут», «значение»);
  • ifparameters — True, если существует массив параметров;
  • parameters — массив параметров MIME (объектов, где каждый вложенный объект состоит из пар «атрибут*, «значение»);
  • parts — массив объектов, описывающий каждую часть сообщения (аналогичен по структуре объекту верхнего уровня, но не может иметь вложенные части).

Тип type основного тела может определяться следующими значениями:

  • 0 — простой текст;
  • 1 — составное сообщение (multipart);
  • 2 — простое сообщение;
  • 3 — приложение;
  • 4 — аудио;
  • 5 — картинка;
  • 6 — видео;
  • 7 — другое.

Типы кодировки encoding:

  • 0 — 7BIT;
  • 1 — 8BIT;
  • 2 — BINARY;
  • 3 — BASE64;
  • 4 — QUOTED-PRINTABLE;
  • 5 — OTHER.

Для простого сообщения возвращает объект такого вида:
stdClass Object
[ifsubtype] => 1
[subtype] => PLAIN [ifdescnption]
=> 0 [ifid] => 0 [lines] => 2 [bytes] =>
41 [ifdisposition] => 0 [ifdparameters]
=> 0 [ifparameters] => 0 [parameters]
=> stdClass Object '>
Для сложного сообщения1 возвращает объект следующего вида:
stdClass Object
[type] => 1 [ifsubtype] => 1
[subtype]
=> ALTERNATIVE [ifdescription] =>
0 [ifid] => 0 [Ifdisposition] =>
0 [ifdparameters] => 0
[ifparameters] =>
1 [parameters] => Array (
[0] => stdClass Object (
[attribute] => boundary
[value] => -=_NextPart_000_0005_
01CODB4D.C33837AO
[parts] => Array ( [0] => stdClass
Object ( [encoding] => 4
[ifsubtype] => 1 [subtype] =>
PLAIN
[ifdescription] => 0 [ifid] => 0
[lines] => 5 [bytes] => 59
[ifdisposition] => 0
[ifdparameters] =>
0 [ifparameters] =>
1 [parameters] => Array (
[0] => stddass Object \ (
} [attribute] => charset
[value] => koi8-r )
[1] "> stddass Object
[encoding] => 4 [ifsubtype] =>
1 [subtype] => HTML [ifdescription]
=> 0 [ifid] => 0 [lines] => 14
[bytes] => 547 [ifdisposition] =>
0 [ifdparameters] =>
0 [ifparameters] =>
1 [parameters] => Array (
[0] => stddass Object (
[attribute] => charset [value] =>
koi8-r ) ) ) ) )
imap_fetchheader
Получение заголовка сообщения
string imap_fetchheader (int imap_stream, int msgno, int flags)
Возиращается полный, нефильтрованный заголовок (формата RFC822) сообщения с номером msgno в текущем ящике.

В аргументе flags могут быть указаны следующие значения (их можно бинарно комбинировать):

  • FTJJID — в аргументе msgno указан уникальный идентификатор UID;
  • FT_INTERNAL — возвращать текст как есть, а не в формате CRLF1;
  • FT_PREFETCHTEXT — (RFC822) одновременно получается текст сообщения, что сокращает общую длительность (RTT) подключений ШАР (полученный текст сохраняется в локальном буфере на время подключения).

imap_body
Получение сообщения
string imap_body (int imap_stream, int msg_number [, int flags])
Возвращает тело сообщения с номером msgjiumber в текущем ящике. В аргументе fI ags могут быть указаны следующие значения (их можно бинарно комбинировать):

  • FTJJID — в аргументе msgno указан уникальный идентификатор UID;
  • FT_PEEK — не устанавливать флаг сообщения \Seen (если он еще не установлен);
  • FT_INTERNAL — возвращать текст как есть, а не в формате CRLF1.

Функция возвращает полную точную копию сообщения (как есть). С ее помощью можно прочитать простые сообщения. Для сложных (составных) сообщений функция может вернуть просто строку: «This is a multi-part message in MIME format» («Это сообщение в формате MIME состоит из нескольких частей»). Чтобы извлечь отдельные его части и обработать соответственно MIME-кодировке, пользуйтесь функциями imap_fetch_structure() и imap_fetch_body().
imap_fetchbody
Получение части сообщения
string imap_fetchbody (int imap_stream, int msgjiumber.
string partjiumber [, flags flags])
Возвращает часть тела сообщения с номером msgjiumber в текущем ящике. Спецификация указания перечисления номеров секций в аргументе partjiumber определяется IMAP 4 (в тривиальном случае это может быть простой номер части, где 0 — основная часть, 1 и далее — вложенные).
В аргументе flags могут быть указаны следующие значения (их можно бинарно комбинировать):

  • FTJJID — в аргументе msgno указан уникальный идентификатор UID;
  • FT_PEEK — не устанавливать флаг сообщения Seen (если он еще не установлен);
  • FT_INTERNAL — возвращать текст как есть, а не в формате CRLF.

Например, для сложного сообщения, структура которого приведена в примере функции imap_fetchstructure(), содержание частей может быть следующим.
Это основная часть сообщения (при вызове imap_fetchbody($m,l,0);):
X-F: <ig@igor > Sun May 13 01:41:00
2003 Received: from igor [127 0 0.1] by igor
(SMTPD32-6 06 EVAL) id ADEC10316 Sun.
13 May 2001 01:41-00 +0400 Message-ID:
<000801cOdb2c$3c46a2cO$01000D7№igor>
From: "IG" <ig@igor.> To <igor@localhost>
Subject Приветствие Date: Sun. 13 May 2001
01.41-00 +0400 MIME-Version: 1.0
Content-Type: multipart/alternative:
boundary"-- --=_NextPart_000_0005_
01CODB4D.C33837AO" X-Pnonty:
3 X-MSMail Priority Normal
X-Mailer: Microsoft Outlook Express
5.00 2919 6700 X-MimeOLE: Produced
By Microsoft MimeOLE V5.00.2919.6700
X-RCPT-TO- <igor@localhost> X-UIDL:
289703661 Status: U
Это первая вложенная часть (при вызове imap_fetchbody($m,l,l);):
Привет.
У нас все хорошо
Пока.
Это вторая вложенная часть (при вызове imap_fetchbody($m,l,2);):
<!DOCTYPE HTML PUBLIC "
-//W3C//DTD HTML 4 0
Transitional//EN"> ^HTML>
<HEAD> <META content=
3D"text/html. charset=3Dkoi8-r"
http-equiv=3DContent-Type>
<META content«3D"MSHTML 5.00.2920.0"
name=3DGENERATOR>
<STYLE>
</STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3D"Arial Cyr"
size=3D2> Привет </FONT>
</DIV>
<DIV><FONT face=3D"Anal CYR"
size=3D2> У нас все хорошо.</FONT>
</DIV> <DIV><FONT face=3D"Anal CYR"
size=3D2> Пока. </FONT></DIV>
</BODY>
</HTML>
bnap_uid
Получение DID сообщения из порядкового номера
int imap_uid (int imap_stream, int msgno)
Возвращается уникальный идентификатор сообщения UID. Он отличается от номера неизменностью, так как номера псревычисляются при удалении сообщений. Действие функции обратно imapjnsgno().
echo imap_uid($mbox.l);
// выводит например: 289703561
imap_msgno
Получение порядкового номера сообщения из UID
int imapjnsgno (int imap_stream, int uid)
Действие функции обратно imap_uid().
imap_setflag_full
Установка флагов сообщения
string imap_setflag_fu"n (int stream, string sequence, string flag, string options)
В аргументе sequence указывается перечисление номеров сообщений, для которых необходимо установить флаги, указанные в аргументе flag. Флат (согласно RFC2060) обозначаются: "\\Sccn", "\\Answered", "\\Flagged", "\\Deleted", "\\Draft", и "\\Rccent".
В аргументе options может быть указано значение STJJID, указывающее на то, что в аргументе sequence указан уникальный идентификатор UID.
$mbox =- imap_open("{your.I map.host:143}".
"userrame"."password") || dieC'can't connect: "
.imap_last_error()):
if (imap_sPtflag_full($mbox."2A15:
19.23"."\\Seen \\Flagged")) print
"Флаги установлены";
imap_clobe($mbox).
imap_clearflag_ full
Сброс флагов сообщения
string imap_clearf!ag_fun (int stream, string sequence, string flag, string options)
Действие функции противоположно imap_setflag_fuTI().
См. описание в imap_setf1ag_fun().
imap_delete
Маркировка сообщения как удаленного
int imapjJelete tint imap_stream, int msg_number [, int flags])
Возвращает TRUE.
В аргументе msg_number указывается номер сообщения, а в flags (при значении FTJJID) - является ли номер идентификатором. Сообщения, помеченные к удалению, остаются в ящике, пока не будет вызвана функция imap_expunge() или подключение (с установленным флагом CL_EXPUNGE) не будет закрыто функцией imap_close().
\ Smbox - imap_open ("{your miap.hostJINBOX".
"username". "password") || die
("can't cornect: " imap_last_error()):
/ Scheck = imapjnailboxmsginfo
(Smbox): print "Сообщений до удаления
" Scheck->Nmsgs . "<br>\n" ;
imapjJelete (Smbox. 1);
$check = imipjnailboxmsginfo
(imbox): print "Сообщений после удаления
".$check->Nmsgs."<br>\n" : imap_expunge
(Smbox): $check = imap_mailboxmsginfo
(Smbox).
print " Сообщений после expunge()
: ",$chPck->Nmsgs "^br>\n" ; imap_close
(Smbox);
imap_undelete
Восстановление удаленного сообщения
int imap_undelete (int imap_stream, int msg_number)
Функция удаляет флаг удаления с сообщения с номером msgjiumber. Этот флаг ранее можег быть установлен функциями imap_delete(), imapjnail_move() или imap_setflag_full().
Возвращает TRUE или FALSE — при ошибке.
imap_ expunge
Удаление «удаленных» сообщений
int imap_expunge (int imap_stream)
Полностью удаляет из ящика сообщения, имеющие флаг "\\Dcleted", который может быть установлен функциями imap_delete(), imap_mail_ move() или imap_setflag_full().
Возвращает TRUE.
imap_mail_copy
Копирование сообщения в ящик
int -imapjnail_copy (int imap_stream, string msglist, string mbox [. int flags])
Возвращает TRUE или FALSE — при ошибке.
Перечисление номеров копируемых сообщений указывается в стро-I ковом аргументе msglist. Их следует перечислять через запятую, без пробелов, диапазоны указываются знаком двоеточия.
См. также документ RFC2060.
Ящик назначения, указываемый в аргументе mbox, указывается без имени сервера.
В аргументе flags можно указывать битовую маску из следующих констант:

  • CPJJID - номера являются уникальными идентификаторами UID;
  • СР MOVE — удалять сообщения после копирования.

imap_mail_copy($m. "1.3 5"."INBOX/Текущие"):
imap_mail_move
Перемещение сообщения в ящик
int imapjnailjnove (int imap_stream, string msglist, string robox [. int flags])
Функция аналогична вызову:
imap_mail_copy(imap_stream, msglist, mbox, flags | CP_MOVE );
imap_alerts
Получение сообщения IMAP
array imap_alerts (void)
Возвращается массив, содержащий все извещения, посланные сервером от начала подключения или после прошлого вызова данной функции.
imap_mime_header_decode
Декодирование элементов MIME заголовков
array imap_header_decode (string text)
Функция декодирует расширенные заголовки, посланные не в тексте ASCII (см. RFC2047). Декодированные элементы возвращаются в массиве объектов, каждый из которых содержит пару "charset" и "text" (кодировка и содержимое текста). Если заголовки не были закодированы (то есть они передавались в кодировке US-ASCII), значение элемента "charset" будет равно "default".
$teAt="*?ISO-8859-l?Q?Keld_>
r8rn_Simoisen?= <kpldG>dkuug.dk>";
print._r( тлар irnme_heacier_decode
($text 0
Выводит следующее:
Arrayt
[0] -> stdClass Object (
[charset] => ISO-8859-1
[text] => Keld Juirn Slmonsen )
[1] -> stdClass Object (
[charset] => default [text] «>
<keld@dkuug.dk> ) )
imap_mail_compose
Создание сообщения MIME по шаблону
string imapjrtan_compose (array envelope, array body)
<?php
$envelope["from"]="musore
@afterfive com". $envelope["to"]="
musone@darkstar"; $envelope["cc"]
="musone@edgeglobal.com".
$partlC"type">TYP0WLTIPART;
$partl["siibtype"]="mixed";
$flleneroe-'/tmp/lroap c.gz";
$fp=fopen($filename."r").
$contents=fread<$fp.filesize($filename)):
fc!ose($fp):
$part2["type']=TYPEAPPLICATION.
$part2["encoding"]=ENCBIMARY:
$part?["subtype">"octet-stream".
$part?["descnption"]=basename
($filename); $part2["contents.data"]=
$contents;
$part3["type">TYP£TEXT.
$part3["subtype"]="plain".
$part3[ "descn pt i on" ]="descri pt i on3";
$part3["contents.data ']="contents
.data3\n\n\n\t";
$body[l]=$partl: $body
[2]=$part2. $body[3]=$part3:
echo nl2br(imap_mail_compose
($envelope.$body)): ?>
imap_append
Создание сообщения в ящике
int imap_append (Int imap_stream, string mbox, string message [, string flags])
Возвращает TRUE или FALSE — при ошибке.
В аргументе message содержится текст сообщения, включая текст заголовка. Для многих серверов необходимо обозначать конец строк парой символов «\r\n».
В аргументе flags можно указать флаги, присваиваемые сообщению. ,
$stream = imap_open("(
your imap.host}INBOX.Drafts"."username".
"password"): /
[ $check = imap_check($stream);
print "Сообщений было: " $check->
Nmsgs "\n";
imap_append($stream."
{your.imap.host}INBOX.Drafts" .
"From- me@my.host\r\n"
"To: you@your.host\r\n"
Subject: test\r\n" "\r\n"
."this TS a test message, please
ignore\r\n". "\\Flagged \\Draft"):
$check = imap_check($stream): ' print
"Сообщений стало: ". $check->
Nmsgs "\n"; imap_close
($stream).
imap_ mail
Посылка email
string imapjnail (string to, string subject, string message [, string additionaljieaders [, string cc [, string bcc [, string rpath>)
Функция пока доступна только в PHP 3.
Вспомогательные функции
imap_last_error
Получение описания последней ошибки
string imap_last_error (void)
Возвращается строка, содержащая полное описание ошибки ШАР (если она имелась), произошедшей в ходе исполнения сценария. Стек сообщений не изменяется, и повторный вызов функции возвратит то же значение (если других ошибок не произошло).
imap_errors
Получение всех возникших ошибок array imap_errors (void)
В массиве возвращаются строки описания ошибок ШАР, произоше/ тих от начала подключения или с момента последнего вызова дан ной функции. Вызов функции полностью очищает стек ошибок.
imap_qprint
Конвертация строки quoted-printable в 8-bit string imap_qprint (string string.j Способ конвертации описан в RFC2045, раздел 6.7. / Возвращает двоичную, 8-битную строку.
См. также imap_8bit().
imap_8bit
Конвертация строки 8bit в quoted-printable
string imap_8bit (string string)
Способ конвертации описан в RFC2045.
Возвращает строку, «цитированную для печати».
print imap_8bit("The Привет"),
// напечатает. The <F=FO=E8=E2=E5=F2
См. также imap_qprint().
imap_ binary
Конвертация строки 8bit в base64
string imapjjinary (string string)
Процедура конвертации описана в RFC2045.
Возвращает строку в формате base64.
print imap_tnnary("The Привет");
// напечатает: VGhlIM/w60L18g==
См. также imap_base64().
imap_base64
Декодирование BASE64
string imap_base64 (string text)
Процедура конвертирования описана в RFC2045.
См. также imap_binary().
imap_rfc822_write_address
Форматирование строки адреса
string imap_rfc822_write_address (string mailbox, string host, string personal)
Возвращает строку адреса электронной почты, сформированную из заданных значений согласно правилам, указанным в RFC822.
print imap_rfc822_write_address
("ig"."php net"."Igor Ghgin");
// выведет. Igor Grigin <ig@php.net>
imap_rfc822_parse_adrlist
Интерпретация адреса
array imap_rfc822_parse_adrlist (string address, string default_host)
Исходная строка с перечислением почтовых адресов, записанных в формате RFC822, указывается в аргументе address. Аргумент содержит имя хоста, добавляемое к адресу, если в нем таковое отсутствует.
Возвращается массив объектов, каждый из которых может иметь следующие свойства:

  • mailbox — имя ящика (usernamc);
  • host — имя хоста;
  • personal — личное имя;
  • adl — доменный разделитель.

$address_stnng = "Igor Grigin
<ig@my.domain.net>,postmaster
@somedomain net. root";
$address_array = imap_rfc822_parse_ac!rlist
($address_string."our net").
if(! is_array($address_array))
dieC'somethings wrong\n"):
print_r($address_array);
Будет выведено следующее:
Arrayt [0] => stdClass Object
( [mailbox] => ig [host] =>
my domann.net [personal] =>
Igor Origin ) [1] => stdClass Object
( [mailbox] => postmaster [host]
=> somedomain.net )
[2] => stdClass Object ( [mailbox]
=> root [host] => our net ) )
imap_rfc822 parse headers
Интерпретация заголовков
из строки object
imap_rfc822_parse_headers
(string headers [, string defaulthost])
Функция сходна с imap_header(), но информацию она получает не с сервера ШАР, а из строки headers.imap_utf7_decode
Декодирование строки UTF-7
string imap_utf7_decode (string text)
Возвращает оригинальную строку или FALSE — в случае ошибки. Эта кодировка часто используется для адресов почтовых ящиков, содержа-! щих национальные символы (например, символы кириллицы). Функ-/ ция использует модифицированный алгоритм, описанный в RFC2060, раздел 5.1.3 (устаревший алгоритм» был описан в RFC1642).
imap_utf7_encode
Кодирование строки 8bit в UTF-7
string imap_utf7_encode (string data)
imap_utf8
Конвертация текста в UTF8
string imap_utf8 (string text) Конвертация описана в RFC2044.

 

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г. Яндекс.Метрика