Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #72, ДЕКАБРЬ 2004 г.

Виртуальная голубятня

Константин Клягин

Хакер, номер #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() избавим ящик от спама.

Назад на стр. 072-120-2  Содержание  Вперед на стр. 072-120-4