Помощник
Дата поста: | В теме: | За сообщение: | Поблагодарили: | ||
---|---|---|---|---|---|
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) |
||
Текстовая версия | Сейчас: 26.4.2024, 5:29 |