PHP: Web-почта своими руками

Никита Кислицин

Xakep, номер #059, стр. 059-098-2


Однако тупо использовать чужие решения тоже не годится - поэтому я все же расскажу тебе, как работают все используемые классы. Класс pop3 имеет несколько внешних свойств и методов. Набор свойств стандартен: имя сервера и порт, на котором висит демон. Что касается методов, то и тут нас ждет полная реализация протокола pop3 - класс позволяет осуществлять как обычную открытую, так и защищенную APOP-аутентификацию. Метод Statistics посылает стандартную команду STAT и, обрабатывая результаты, модифицирует два параметра: число сообщений и общий вес корреспонденции. ListMessages при помощи команды LIST получает список сообщений и помещает их в возвращаемый процедурой массив. Метод RetrieveMessage принимает несколько параметров и, в зависимости от них, возвращает либо целиком письмо, либо несколько его строк. Также реализованы методы DeleteMessage, ResetDeletedMessages, Close и IssueNOOP. Что делают первые два понятно из названия, предпоследний же закрывает соединение командой QUIT (это важно, поскольку помеченные для удаления сообщения физически сотрутся только после завершения сессии), а IssueNOOP служит для подтверждения того, что соединение все еще нужно - по дефолту после 10 минут бездействия клиента, сервер автоматически разрывает соединение.

Класс smtp_mail имеет много внутренних функций, большая часть которых производит корректную обработку посылаемых и получаемых данных - подгоняет под 788-ю РФЦ посылаемые серверу строки (в этом документе в качестве конца строки определена последовательность символов CRLF - \r\n, что равно 0x13 0x10 в шестнадцатеричном представлении). Снаружи доступен лишь один метод send_e-mail (hostname, from, to, data). Он, используя описанные выше функции, посылает почту.

Скручиваем все в одну систему

Теперь, когда ты знаешь, как работать с классами, можно приступить и к созданию самой системы. Прежде всего следует создать несколько таблиц mysql - в них мы будем хранить информацию об обслуживаемых почтовых серверах, а также входящую и исходящую корреспонденцию.

Для защиты системы от несанкционированного доступа пользователей будем использовать функции аутентификации, которые писали уже не раз (имеются в виду локальные, а не почтовые пользователи). Т.е. один пользователь системы может иметь множество обслуживаемых аккаунтов, доступ к которым регулируется различными паролями. Вот спецификации создаваемых таблиц:

>create table inbox(mid int not null primary key auto_increment,

to varchar(50), from varchar(50),

subject varchar(50), size int,

date date, text text);

>create table outbox(mid int not null primary key auto_increment,

Назад на стр. 059-098-1  Содержание  Вперед на стр. 059-098-3