Виртуальная голубятня Константин Клягин Хакер, номер #072, стр. 072-120-3 $info = imap_mailboxmsginfo($mbox); Помимо прочей полезной инфы, в $info-> Nmsgs мы поимеем количество ожидающих в конце тоннеля мессаг. Теперь можно смело запускать цикл: for($i = 1; $i <= $info-> Nmsgs; $i++) { $h = imap_headerinfo($mbox, $i); // Обработка заголовка. } Наконец, к каждому из полей заголовка в списке прицепим ссылку на скрипт, открывающий данную мессагу на чтение. В нашем скрипте list.php это делается так: $url = "read.php?n=".(int)$h-> Msgno; ... <td> <nobr> <a href="<?= $url ?> "> <?= $h-> Msgno ?> </a> </td> ... Таким образом, при нажатии на ссылку будет запрашиваться read.php с единственным параметром n, содержащим номер сообщения. Читаем Сообщения на почтовике идентифицируются порядковым номером. Любое обращение к конкретной мессаге в ящике осуществляется посредством таких номеров. Так как мы уже дошли до страницы с просмотром отдельного письма, заглянем в скрипт и узнаем, как это делается: $h = imap_headerinfo($mbox, $_GET[n]); $body = imap_body($mbox, $_GET[n]); Номер задается параметром n, который мы передаем нужным функциям. В итоге $h содержит информацию о заголовке, а $body - тело письма. Кроме заголовка и текста сообщения, на странице read.php можно заметить несколько кнопок: «Ответить», «Удалить», «Обратно» и «Выход». И если с последними двумя все ясно - простенький JavaScript в поле onClick делает редирект на list.php и login.php соответственно, то к первой паре кнопок стоит присмотреться внимательно. При нажатии на «Ответить» делается редирект на скрипт send.php, который без параметров открывает пустую форму написания нового сообщения. Однако здесь мы передаем параметр reply с номером читаемой мессаги в качестве значения. Это заставит вызываемый скрипт автоматически заполнить заголовок, а в поле с телом сообщения поставить текст оригинала с цитированием. Кнопка «Удалить» сделает так, будто в странице со содержимым ящика юзер сам отметил чекбокс напротив текущего сообщения и нажал «Удалить». Скрипту list.php мы подставим параметр "del[]=N", где N - номер читаемой мессаги. onClick='top.location.href="list.php?del[]=<?= $_GET[n] ?> "' Удаляем Равно как в read.php, в странице со списком предусмотрена возможность удалить помеченные сообщения. Напротив каждого элемента списка мы предусмотрительно расставили чекбоксы, пометив которые и нажав «Удалить», можно отправить к праотцам ненавистный спам. Жаль, конечно, что не вместе с его авторами. Но мы над этим работаем :). Вот так выглядят чекбоксы в коде страницы: <td> <input type="checkbox" name="del[]" value="<?= (int) $h-> Msgno ?> "> </td> PHP умеет формировать массивы из элементов формы с одинаковыми именами, если имена эти заканчиваются на «[]». Таким образом, в скрипте мы получим массив выбранных номеров в $_GET[del]. Так как нажатие кнопки «Удалить» заставляет скрипт обратиться с нужными параметрами к самому себе, всякий раз при старте list.php ты должен делать проверку на запросы удаления отдельных мессаг. Для этого пройдемся по массиву $_GET[del] и отметим для удаления каждый из выбранных номеров с помощью imap_delete(). А по окончании цикла - с помощью imap_expunge() избавим ящик от спама. |