При создание webmail-а возникла проблема

Статус
В этой теме нельзя размещать новые ответы.

Bart

Новичок
При создание webmail-а возникла проблема

Получается что подключаюсь путём соккетов и начинаю просматривать почту через цикл подставляя номер письма через переменную $f , но почему то просматривается только первое письмо в чё может быть ошибка, заранее благодарен (мне необходимо просто вывести список писем с небольшой инфой о них, по отдельности всё работает а в цикле нет)
PHP:
<?
// При отправке почты, все не латинские символы в заголовках кодируется, 
// например тема письма может выглядеть так =?windows-1251?B?7/Du4uXw6uA=?= 
// вот такие тексты и будет преобразовывать эта функция
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_body($body,$enctype,$ctype) {
$enctype = explode(" ",$enctype); $enctype = $enctype[0];
if(strtolower($enctype) == "base64")
$body = base64_decode($body);
elseif(strtolower($enctype) == "quoted-printable")
$body = quoted_printable_decode($body);
if(ereg("koi8", $ctype)) $body = convert_cyr_string($body, "k", "w");
return $body;
}

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

// если письмо будет состоять из нескольких частей (текст, файлы и т.д.)
// то эта функция разобьет такое письмо на части (в массив), согласно разделителю boundary
function split_parts($boundary,$body) {
$startpos = strpos($body,$boundary)+strlen($boundary)+2;
$lenbody = strpos($body,"\r\n$boundary--") - $startpos;
$body = substr($body,$startpos,$lenbody);
return explode($boundary."\r\n",$body);
}

// Эта функция отделяет заголовки от тела.
// и возвращает массив с заголовками и телом
function fetch_structure($email) {
$ARemail = Array();
$separador = "\r\n\r\n";
$header = trim(substr($email,0,strpos($email,$separador)));
$bodypos = strlen($header)+strlen($separador);
$body = substr($email,$bodypos,strlen($email)-$bodypos);
$ARemail["header"] = $header; 
$ARemail["body"] = $body;
return $ARemail;
}

// разбирает все заголовки и выводит массив, в котором каждый элемент является соответсвующим заголовком 
function decode_header($header) {
$headers = explode("\r\n",$header);
$decodedheaders = Array();
for($i=0;$i<count($headers);$i++) {
$thisheader = trim($headers[$i]);
if(!empty($thisheader))
if(!ereg("^[A-Z0-9a-z_-]+:",$thisheader))
$decodedheaders[$lasthead] .= " $thisheader";
else {
$dbpoint = strpos($thisheader,":");
$headname = strtolower(substr($thisheader,0,$dbpoint));
$headvalue = trim(substr($thisheader,$dbpoint+1));
if($decodedheaders[$headname] != "") $decodedheaders[$headname] .= "; $headvalue";
else $decodedheaders[$headname] = $headvalue;
$lasthead = $headname;
}
}
return $decodedheaders;
}

// эта функция нам уже знакома. она получает данные и реагирует на точку, которая ставится сервером в конце вывода.
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;
}
?>

<?
$pop_conn = fsockopen("[b]почтовый сервер[/b]",110,$errno,$errstr,10);
$code=fgets($pop_conn,1024);
if(strstr($code,"+OK"))
{
fputs($pop_conn,"USER [b]логин на ящик[/b]\r\n");
$code= fgets($pop_conn,1024);
   if(strstr($code,"+OK"))
   {
   fputs($pop_conn,"PASS [b]пароль на ящик[/b]\r\n");
   $code= fgets($pop_conn,1024);
      if(strstr($code,"+OK"))
      {
      fputs($pop_conn,"STAT\r\n");
      $info=explode(" ",fgets($pop_conn,1024));
      echo "Кол-во писем: ".$info['1']."<br>"."Общий размер: ".$info['2']."<br><br>";
      
      for($f=1;$f<=$info['1'];$f++)
      {
      fputs($pop_conn,"RETR ".$f."\r\n");
      $text.= get_data($pop_conn);
      $struct=fetch_structure($text); 
      $mass_header=decode_header($struct['header']);
      $mass_header["subject"] = decode_mime_string($mass_header["subject"]);
      
      $type = $ctype = $mass_header['content-type'];
      $ctype = split(";",$ctype);
      $types = split("/",$ctype[0]);
      $maintype = trim(strtolower($types[0])); // text или multipart    
      $subtype = trim(strtolower($types[1])); // а это подтип(plain, html, mixed) 
         
      echo $f." <a href='mailto:".decode_mime_string($mass_header["envelope-to"])."'>".decode_mime_string($mass_header["from"])."</a>&nbsp;&nbsp;&nbsp;&nbsp;".decode_mime_string($mass_header["subject"])."&nbsp;&nbsp;&nbsp;&nbsp;".decode_mime_string($mass_header["date"])."&nbsp;&nbsp;&nbsp;&nbsp;".$mass_header["size"]."<br><br>Сообщение:<br>";   
         ///////////////////////////////////////////////////////////////////////////////////////////////
         if($maintype=="text")
         {
         $body = compile_body($struct['body'],$mass_header["content-transfer-encoding"],$mass_header["content-type"]);
         print $body;
         }
         ////////////////////////////////////////////////////////////////////////////////////////////////
         if($maintype=="multipart" and ereg($subtype,"signed,mixed,related"))
         {
         echo "multipart or signed";
         }
      echo "<br><br><br>";
      }

}
      else
      {
      echo "не правильный логин или пароль!";
      }
   }
   else
   {
   echo "не правильный логин или пароль!";
   }
}
else
{
echo "не могу подключиться к серверу!";
}
?>
 

TutanXamoN

Новичок
Вот если чесно то читать всё ето причём в формате текста оч даже влом учитывая объём поставь хотябы теги
PHP:
 

Bart

Новичок
получаеться в верху идут функции которые обрабатывают письмо а начиная со строки $pop_conn = fsockopen("почтовый сервер",110,$errno,$errstr,10); начинаеться подключение и работа
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху