PHP: Web-почта своими руками
Никита Кислицин
Xakep, номер #059, стр. 059-098-3
to varchar(50), from varchar(50),
subject varchar(50), size int,
date date, text text);
>create table IncomeServers(host varchar(50),
type varchar(5), login varchar(50),
passwd varchar(50));
>create table OutgoingServers(host varchar(50),
login varchar(50), passwd varchar(50));
После того как все таблицы созданы, настало время описать ряд функций по аутентификации пользователя, изменению настроек и т.д. Это обычная работа с сервером mysql, так что ты должен самостоятельно справиться с поставленной задачей.
Затем наступает черед описывать функции по работе с сообщениями: отправка через smtp-сервер, сохранение отправленного сообщения, получение сообщений с обслуживаемых серверов, сохранение их в БД и демонстрация результата пользователю. Во врезке с кодом ты найдешь все необходимое. Теперь твоя задача состоит в грамотной комбинации их некоторым образом, в зависимости от управляющего главным скриптом параметра, который для определенности назовем $do. Т.е., например, если передан параметр $do=sendmsg, то скрипт вызывает функцию посылки сообщения, а если $do=ShowMsg, то следует показать какое-то сообщение.
Собственно, все. Полный код системы лежит на CD, там же находится много полезных документов, полное описание протоколов imap4/pop3/smtp, несколько полезных классов и интересных статей по веб-программированию. Дерзай!
Врезка с кодом
<?
require("pop3.php"); # Подключаем класс
$pop3=new pop3_class; # Создаем новый экземпляр
$pop3->hostname="host.ru";
# Присваиваем свойству экземпляра значение
function ListMessages() { /* Список сообщений */
$result=$pop3->ListMessages("",0);
/* Вызываем соответствующий метод */
for(Reset($result),$message=0;$message<count($result);
Next($result),$message++)
echo "Сообщение ",Key($result)," ";
echo $result[Key($result)]," байт.<br>\n";
}
function ShowMessage($mid) { /* Выводим сообщение */
$pop3->RetrieveMessage($mid,&$headers,&$body,-1)
echo "Заголовки письма: $headers<br><br>
Тело письма: $body";
}
function DeleteMessage($mid) {
/* Удаляем сообщение $mid */
$pop3->Deletemessage($mid);
}
function Disconnect() {
/* Функция, закрывающая соединение с узлом */
$pop3->Close();
}
$conn=$pop3->Open();
if($conn=="") {
echo "Подключились к узлу $pop3_connection->hostname!<br>\n";
$ll=$pop3_connection->Login("user","password",0);
/* Логинимся на сервере */
if ($ll=="") { /* Если все ок */
echo "Пользователь $user опознан!<br>\n";
$pop3->Statistics(&$messages, &$size));
/* Получаем статистику по ящику */
echo "Общий объем - $size байт.<br>\n";
ListMessages();
}
}
?>
WWW
www.phpclasses.org
www.codenet.ru/webmast/smtp.php
www.codenet.ru/webmast/pop3.php
www.i2r.ru/static/240/out_3787.shtml
www.imap.org/imap.docs.html
www.imap.org/imap.vs.pop.html
www.acnet.ge/networking/applic_l/e_mail/internet/imap.htm
http://d.dp.ua/rfc.php?act=show&rfc=rfc-index
www.allinfo.ru/php4/manphp4rus/f/imap-open.htm
Хорошую службу сослужил бы самопальный веб-интерфейс, который обеспечит максимальную секьюрность мероприятия.