CPU0
09.01.2010, 16:53
PHP POP3 Interface [Proxy Support]
Описание:
Набор функций для работы с POP3(RFC 1939 (http://www.ietf.org/rfc/rfc1939.txt)).
Текущий список функций (будут дополняться по Вашим просьбам):
pop3_connect()
pop3_disconnect()
pop3_login()
pop3_stat()
pop3_list()
pop3_retr()
pop3_dele()
pop3_rset()
=====================================
Функция pop3_connect()
Устанавливает подключение с сервером и возвращает идентификатор соединения при успешном подключении. При ошибке возвращает FALSE
pop3_connect($host, $proxy=FALSE, $phost='', $pport='', $port='110', $timeout='20')
$host - адрес POP3-сервера
$proxy - использование Proxy-сервера при подключении (TRUE/FALSE)
$phost - IP-адрес Proxy-сервера
$pport - порт Proxy-сервера
$port - порт POP3-сервера
$timeout - таймаут соеденения
function pop3_connect($host, $port='110', $proxy=FALSE, $phost='', $pport='', $timeout='20')
{
if($proxy)
{
$patern_ip="^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$";
$patern_port="^([0-9]{2,5})$";
if(ereg($pattern_ip, $phost) AND ereg($pattern_port, $pport))
{
$s=fsockopen("tcp://".$phost, $pport);
if($s)
{
stream_set_timeout($s, $timeout);
fputs($s, "CONNECT $host:$port HTTP/1.0\r\n\r\n");
$line = fread($s, 256);
if(eregi("200", $line))
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
return $s;
}
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
} else {
$s=fsockopen($host, $port);
if($s)
{
stream_set_timeout($s, $timeout);
fputs($s, "NOOP\r\n");
$line=fread($s, 256);
if(eregi("\+OK", $line))
{
return $s;
} else {
return false;
}
} else {
return false;
}
}
}
Функция pop3_login()
Авторизует пользователя на POP3-сервере, при успешной авторизации возвращает TRUE, при ошибке возвращает FALSE
pop3_login($s, $login, $password)
$s - идентификатор соединения
$login - имя пользователя для авторизации
$password - пароль для авторизации
function pop3_login($s, $login, $password)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "USER $login\r\n");
$line=fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "PASS $password\r\n");
$line=fread($s, 256);
if(eregi("\+OK",$line))
{
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_disconnect()
Закрывает соединение с POP3-сервером, возвращает TRUE при успешном закрытии соединения,и FALSE при ошибке
pop3_disconnect($s)
$s - идентификатор соединения
function pop3_disconnect($s)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "QUIT\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
unset($s);
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_stat()
Возвращает массив, 1ый элемент которого - количество писем в ящике, 2ой - размер всех писем в байтах. Возвращает FALSE при ошибке
pop3_stat($s)
$s - идентификатор соединения
function pop3_stat($s)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "STAT\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
$reply=explode(" ",$line);
return array($reply[1], $reply[2]);
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_list()
Возвращает массив, ключи которого - идентификаторы писем, значения - размер письма. Возвращает FALSE при ошибке
pop3_list($s)
$s - идентификатор соединения
function pop3_list($s)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "LIST\r\n");
while(!feof($s)) {
$line.=fread($s, 256);
$stream_meta_data=stream_get_meta_data($s);
if($stream_meta_data['unread_bytes']<=0) break;
}
if(eregi("\+OK", $line))
{
preg_match_all('#([0-9]{1,})\s+([0-9]{3,10})#i', $line, $reply);
unset($reply[0]);
$result=array_combine($reply[1], $reply[2]);
ksort($result);
return $result;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_retr()
Возвращает полное содержание письма, по его идентификатору. Возвращает FALSE при ошибке
pop3_retr($s,$mid)
$s - идентификатор соединения
$mid - идентификатор письма
function pop3_retr($s,$mid)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
$mids=array_keys(pop3_list($s));
if(in_array($mid,$mids))
{
fputs($s, "RETR $mid\r\n");
while(!feof($s)) {
$line.=fread($s, 256);
$stream_meta_data=stream_get_meta_data($s);
if($stream_meta_data['unread_bytes']<=0) break;
}
return $line;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_dele()
Удаляет письмо по его идентификатору, при успешном удалении возвращает TRUE, при ошибке возвращает FALSE
pop3_dele($s,$mid)
$s - идентификатор соединения
$mid - идентификатор письма
function pop3_dele($s,$mid)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "DELE $mid\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_rset()
Восстанавливает "удаленные письма" текущего соединения, при успешном восстановлении возвращает TRUE, при ошибке возвращает FALSE
pop3_rset($s)
$s - идентификатор соединения
function pop3_rset($s)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "RSET\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
=====================================
В ближайшем времени (по приоритету):
функция обработки письма полученного с помощью pop3_retr()
функция скачивания всех писем с ящика
функция удаления всех писем
функция действий со списком e-mail`ов
функция "брутфорсер" :)
Скрипт(и последующие его версии) Вы можете скачать с сайта:
http://dmtn.ru/develop/pop3_interface/
Пример использования:
include('mail.php');
$s=pop3_connect('pop.yandex.ru');
if(pop3_login($s, 'egorka@yandex.ru', 'preved'))
{
//действия при успешной авторизации
} else {
//ошибка авторизации
}
pop3_disconnect($s);
Буду рад советам, пожеланиям, критике
Описание:
Набор функций для работы с POP3(RFC 1939 (http://www.ietf.org/rfc/rfc1939.txt)).
Текущий список функций (будут дополняться по Вашим просьбам):
pop3_connect()
pop3_disconnect()
pop3_login()
pop3_stat()
pop3_list()
pop3_retr()
pop3_dele()
pop3_rset()
=====================================
Функция pop3_connect()
Устанавливает подключение с сервером и возвращает идентификатор соединения при успешном подключении. При ошибке возвращает FALSE
pop3_connect($host, $proxy=FALSE, $phost='', $pport='', $port='110', $timeout='20')
$host - адрес POP3-сервера
$proxy - использование Proxy-сервера при подключении (TRUE/FALSE)
$phost - IP-адрес Proxy-сервера
$pport - порт Proxy-сервера
$port - порт POP3-сервера
$timeout - таймаут соеденения
function pop3_connect($host, $port='110', $proxy=FALSE, $phost='', $pport='', $timeout='20')
{
if($proxy)
{
$patern_ip="^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$";
$patern_port="^([0-9]{2,5})$";
if(ereg($pattern_ip, $phost) AND ereg($pattern_port, $pport))
{
$s=fsockopen("tcp://".$phost, $pport);
if($s)
{
stream_set_timeout($s, $timeout);
fputs($s, "CONNECT $host:$port HTTP/1.0\r\n\r\n");
$line = fread($s, 256);
if(eregi("200", $line))
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
return $s;
}
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
} else {
$s=fsockopen($host, $port);
if($s)
{
stream_set_timeout($s, $timeout);
fputs($s, "NOOP\r\n");
$line=fread($s, 256);
if(eregi("\+OK", $line))
{
return $s;
} else {
return false;
}
} else {
return false;
}
}
}
Функция pop3_login()
Авторизует пользователя на POP3-сервере, при успешной авторизации возвращает TRUE, при ошибке возвращает FALSE
pop3_login($s, $login, $password)
$s - идентификатор соединения
$login - имя пользователя для авторизации
$password - пароль для авторизации
function pop3_login($s, $login, $password)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "USER $login\r\n");
$line=fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "PASS $password\r\n");
$line=fread($s, 256);
if(eregi("\+OK",$line))
{
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_disconnect()
Закрывает соединение с POP3-сервером, возвращает TRUE при успешном закрытии соединения,и FALSE при ошибке
pop3_disconnect($s)
$s - идентификатор соединения
function pop3_disconnect($s)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "QUIT\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
unset($s);
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_stat()
Возвращает массив, 1ый элемент которого - количество писем в ящике, 2ой - размер всех писем в байтах. Возвращает FALSE при ошибке
pop3_stat($s)
$s - идентификатор соединения
function pop3_stat($s)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "STAT\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
$reply=explode(" ",$line);
return array($reply[1], $reply[2]);
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_list()
Возвращает массив, ключи которого - идентификаторы писем, значения - размер письма. Возвращает FALSE при ошибке
pop3_list($s)
$s - идентификатор соединения
function pop3_list($s)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "LIST\r\n");
while(!feof($s)) {
$line.=fread($s, 256);
$stream_meta_data=stream_get_meta_data($s);
if($stream_meta_data['unread_bytes']<=0) break;
}
if(eregi("\+OK", $line))
{
preg_match_all('#([0-9]{1,})\s+([0-9]{3,10})#i', $line, $reply);
unset($reply[0]);
$result=array_combine($reply[1], $reply[2]);
ksort($result);
return $result;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_retr()
Возвращает полное содержание письма, по его идентификатору. Возвращает FALSE при ошибке
pop3_retr($s,$mid)
$s - идентификатор соединения
$mid - идентификатор письма
function pop3_retr($s,$mid)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
$mids=array_keys(pop3_list($s));
if(in_array($mid,$mids))
{
fputs($s, "RETR $mid\r\n");
while(!feof($s)) {
$line.=fread($s, 256);
$stream_meta_data=stream_get_meta_data($s);
if($stream_meta_data['unread_bytes']<=0) break;
}
return $line;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_dele()
Удаляет письмо по его идентификатору, при успешном удалении возвращает TRUE, при ошибке возвращает FALSE
pop3_dele($s,$mid)
$s - идентификатор соединения
$mid - идентификатор письма
function pop3_dele($s,$mid)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "DELE $mid\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Функция pop3_rset()
Восстанавливает "удаленные письма" текущего соединения, при успешном восстановлении возвращает TRUE, при ошибке возвращает FALSE
pop3_rset($s)
$s - идентификатор соединения
function pop3_rset($s)
{
if($s)
{
fputs($s, "NOOP\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
fputs($s, "RSET\r\n");
$line = fread($s, 256);
if(eregi("\+OK", $line))
{
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
=====================================
В ближайшем времени (по приоритету):
функция обработки письма полученного с помощью pop3_retr()
функция скачивания всех писем с ящика
функция удаления всех писем
функция действий со списком e-mail`ов
функция "брутфорсер" :)
Скрипт(и последующие его версии) Вы можете скачать с сайта:
http://dmtn.ru/develop/pop3_interface/
Пример использования:
include('mail.php');
$s=pop3_connect('pop.yandex.ru');
if(pop3_login($s, 'egorka@yandex.ru', 'preved'))
{
//действия при успешной авторизации
} else {
//ошибка авторизации
}
pop3_disconnect($s);
Буду рад советам, пожеланиям, критике