[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка почтового ящика
nigga-popl
Подскажите, как реализовать средствами php проверку почтового ящика, найти там новое непрочитанное сообщение, присвоить некоторым переменным его тему, от кого оно и тело письма. Затем записать все это в мускуль.
С примером фрагментов кода было бы приятней видеть ответы)



Спустя 4 минуты, 59 секунд (10.06.2011 - 09:07) Invis1ble написал(а):
наверное, схема примерно такая: cURL -> получаем контент -> парсим контент smile.gif
А код, я думаю, слишком специфичен и зависит от множества различных факторов, чтобы выкладывать какие-то фрагменты.

Спустя 8 минут, 18 секунд (10.06.2011 - 09:15) kirik написал(а):
Скорее для этой задачи подойдут сокеты. Коннектимся к mail-сереру (pop3 или imap) => запрашиваем письма => делаем что нужно.
UPD
Когда-то довольно давно класс для работы с pop3 писал, но.. Т.к. он стал не нужен, я не дописывал его и не тестил особо. Плюс к этому комментов нет.
Базовый функционал есть.
Свернутый текст
Class popMail
{
private $thread;
private $total_msgs;
private $msgs_list;
private $msg_headers;

public function login($address, $port, $login, $password)
{
$this->thread = fsockopen($address, $port, $errno, $errstr);

if(!$this->thread)
exit('fsockopen() failed: '.$errstr);

$this->getAnswer();

$this->sendRequest('USER '.$login);
$this->getAnswer();

$this->sendRequest('PASS '.$password);
$this->getAnswer();
}

public function getAnswer($top=false)
{
$read = fgets($this->thread);

if($top)
{
$line = $read;
while(!mb_ereg("^\.\r\n", $line))
{
$line = fgets($this->thread);
$read .= $line;
}
}


if($read[0] != '+')
{
if(empty($read))
exit('Unknown error');
else
exit('POP3 failed: '.$read);
}

return $read;
}

public function sendRequest($msg)
{
fwrite($this->thread, $msg."\r\n");
}

public function getInfo()
{
$this->sendRequest('STAT');
preg_match('/(\d+)\s+(\d+)/s', $this->getAnswer(), $out);

$this->total_msgs = $out[1];

return array('total_messages' => $out[1], 'total_size' => $out[2]);
}

public function getMessagesList()
{
if(empty($this->total_msgs))
$this->getInfo();

if($this->total_msgs > 0)
{
for($i = 1; $i <= $this->total_msgs; $i++)
{
$this->sendRequest('LIST '.$i);
preg_match('/(\d+)\s+(\d+)/s', $this->getAnswer(), $out);
$this->msgs_list[$out[1]] = array('msg_id' => $out[1], 'msg_size' => $out[0]);
}
}

else
{
return false;
}

return $this->msgs_list;
}

public function getMessage($id)
{
$this->sendRequest('TOP '.$id.' 0');
$this->msg_headers = trim(strstr($this->getAnswer(true), "\r\n"), "\r\n.");

$this->sendRequest('RETR '.$id);
$msg_body = trim(strstr(str_replace($this->msg_headers, null, $this->getAnswer(true)), "\r\n"), "\r\n.");

return array('headers' => $this->msg_headers, 'body' => $msg_body);
}

public function deleteMessage($id)
{
$this->sendRequest('DELE '.$id);
$this->getAnswer();
}

public function resetMarks()
{
$this->sendRequest('RSET');
$this->getAnswer();
}

public function getHeader($name)
{
if(empty($this->msg_headers))
return false;

preg_match('/'.preg_quote($name, '/').':\s+(.+)/i', $this->msg_headers, $out);

return $out[1];
}

function __destruct()
{
$this->sendRequest('QUIT');
$this->getAnswer();
}
}


Также советую почитать как вообще работает pop3.


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.