X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

История благодарностей участнику BaCo. Поблагодарили: 0 раз(а)
Дата поста: В теме: За сообщение: Поблагодарили:
7.5.2010, 15:16 Email как БД - возможно ли такое?
Юзай вот это:
первым делом мы должны подключиться к серверу
<?
$pop_conn = fsockopen("pop.bk.ru", 110,$errno, $errstr, 10); //открываем сокет
print fgets($pop_conn,1024); //читаем ответ
?>


Если все нормально, ответ будет: +OK
далее нам необходимо авторизироваться
<?
fputs($pop_conn,"USER code@codeismy.name\r\n"); //посылаем юзера
print fgets($pop_conn,1024); //читаем ответ
?>

Ответ: +OK Password required for user code@codeismy.name
Вводим пароль с помощью команды PASS
<?
fputs($pop_conn,"PASS password\r\n"); //посылаем пароль
print fgets($pop_conn,1024);
?>

Ответ: +OK code@codeismy.name maildrop has 2 messages (8192 octets)
В данном ответе говорится, что в ящике 2 письма общим размером 8192 байт.
Когда авторизация пройдена и можно получить информацию командой STAT, она покажет сколько писем в ящике и их общий размер
<?
fputs($pop_conn,"STAT\r\n");
print fgets($pop_conn,1024);
?>

получить весь список писем можно командой LIST
<?
fputs($pop_conn,"LIST\r\n");
print fgets($pop_conn);
?>

Покажет такой ответ:
+OK 2 messages (8192 octets)
1 6654
2 1372
так же если для команды LIST указать номер письма то можно получить информацию только об этом письме
дальше просто приведу список наиболее часто используемых команд
TOP - имеет 2 параметра номер письма и число строк из заголовка, на пример TOP 1 10 покажет заголочки и первые 10 строк письма
DELE - помечает для удаления письмо
RSET - отменяет пометку на удаление
RETR - прочесть письмо полностью
QUIT - завершение сессии (по окончанию сессии все помеченые на удаления письма удалятся)

ну а дальше приведу ряд полезных функций:
получение ответа от сервера
<?
function get_data($pop_conn)
{
$data="";
while (!feof($pop_conn)) {
$buffer = chop(fgets($pop_conn,1024));
$data .= "$buffer\r\n"; //склеиваем строки
if(trim($buffer) == ".") break;
}
return $data; //возвращяем результат
}
?>


При отправке почты, все не латинские символы в заголовках кодируется, например тема письма может выглядеть так =?windows-1251?B?7/Du4uXw=?= вот такие тексты и будет преобразовывать эта функция
<?
function decode_mime_string($subject) {
$string = $subject;
if(($pos = strpos($string,"=?")) === false) return $string;
while(!($pos === false)) {
$newresult .= substr($string,0,$pos);
$string = substr($string,$pos+2,strlen($string));
$intpos = strpos($string,"?");
$charset = substr($string,0,$intpos);
$enctype = strtolower(substr($string,$intpos+1,1));
$string = substr($string,$intpos+3,strlen($string));
$endpos = strpos($string,"?=");
$mystring = substr($string,0,$endpos);
$string = substr($string,$endpos+2,strlen($string));
if($enctype == "q") $mystring = quoted_printable_decode(ereg_replace("_"," ",$mystring));
else if ($enctype == "b") $mystring = base64_decode($mystring);
$newresult .= $mystring;
$pos = strpos($string,"=?");
}
$result = $newresult.$string;
if(ereg("koi8", $subject)) $result = convert_cyr_string($result, "k", "w");
if(ereg("KOI8", $subject)) $result = convert_cyr_string($result, "k", "w");
return $result;
}
?>


перекодировщик тела письма. Само письмо может быть закодировано и данная функция приводит тело письма в нормальный вид. Так же и вложенные файлы будут перекодироваться этой функцией.
<?
function compile_bоdу($bоdу,$enctype,$ctype) {
$enctype = explode(" ",$enctype); $enctype = $enctype[0];
if(strtolower($enctype) == "base64")
$bоdу = base64_decode($bоdу);
elseif(strtolower($enctype) == "quoted-printable")
$bоdу = quoted_printable_decode($bоdу);
if(ereg("koi8", $ctype)) $bоdу = convert_cyr_string($bоdу, "k", "w");
return $bоdу;
}
?>


Функция для выдергивания метки boundary из заголовка Content-Type boundary это разделитель между разным содержимым в письме, например, чтобы отделить файл от текста письма
<?
function get_boundary($ctype){
if(preg_match('/boundary[ ]?=[ ]?(["]?.*)/i',$ctype,$regs)) {
$boundary = preg_replace('/^\"(.*)\"$/', "\\1", $regs[1]);
return trim("--$boundary");
}
}
?>


Спасибо сказали: (0)

RSS Текстовая версия Сейчас: 26.4.2024, 5:29
Дизайн