Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IMAP его перекодировки и пересылки, кодировки. 2 дня голову ломаю. HELP  
:(
    Опции темы
001dark
  Дата 28.11.2007, 05:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 13.3.2007

Репутация: нет
Всего: нет



Прошу помощи. интерфейс IMAP

Что хотелось  сделать:
1.поступает HTML письмо на сервак
2.скриптом выдераю из него тему, текст, перекодирываю его независимо от кодировки
3.направляю спам ящик. 

ПОБЛЕМА - немогу сделать перекодировку, да и выдрать нормально текст не получается.
2 день занимаюсь только этим окончательно запутался, короче прошу помощи в написании скрипта,своих сил не хватает . НЕ думал что столько время уйдет ( 
везде гуглил,последний вариант винград 
Код

<?php
error_reporting(E_ALL);

$charset="";
$mailbox_from="";
$password="";
$popserv="";
$mailbox_to="";

    list($mailbox_from,$password,$popserv,$mailbox_to)=explode(">",$line);
    echo "<hr> mailbox_from: ".$mailbox_from;
    echo "<br> password: ".$password;
    echo "<br> POPserv: ".$popserv;
    echo "<br> mailbox_to: ".$mailbox_to."<br>";        
    
 
    $stream = imap_open("{{$popserv}/pop3:110}INBOX","$mailbox_from","$password");
    if($stream){
        echo " <b>Connected to:</b> {$mailbox_from} <br>";
            //print_r(imap_headers($stream));
        $msgs = imap_sort($stream,SORTDATE,false);
        if(is_array($msgs)){
            $total_letters = 0;
            $not_read_letters = 0;
            foreach($msgs as $msg_no){
                $total_letters++;
                $msg = imap_header($stream,$msg_no);
                echo "<br><br>Message #".$msg_no;
                echo "<br>toaddress:". htmlspecialchars($msg->toaddress);
                //echo "<br>fromaddress:". htmlspecialchars($msg->fromaddress);     

                echo "<br>fromaddress: ";
                $elements = imap_mime_header_decode($msg->fromaddress);
                for ($i=0; $i<count($elements); $i++) {
                    echo "Charset=". $elements[$i]->charset;
                    if (strtolower($elements[$i]->charset) != strtolower("default")) {
                    echo "TEXT=". iconv($elements[$i]->charset,strtolower("WINDOWS-1251"),$elements[$i]->text);
                    } else 
                    echo "TEXT=".$elements[$i]->text;
                }         
                // ТЕМА сообщения 
                echo "<br>Subject: ";
                $elements = imap_mime_header_decode($msg->subject);
                for ($i=0; $i<count($elements); $i++) {
                    echo "Charset=". $elements[$i]->charset;
                    if (strtolower($elements[$i]->charset) != strtolower("WINDOWS-1251")) {
                    echo "TEXT=". iconv($elements[$i]->charset,strtolower("WINDOWS-1251"),$elements[$i]->text);
                    $charset=$elements[$i]->charset;
                    } else 
                    echo "TEXT=".$elements[$i]->text;
                } 
                
                   
                $dataTxt = (get_part($stream, $msg_no, "TEXT/PLAIN"));
                $dataHtml = (get_part($stream, $msg_no, "TEXT/HTML"));
               if ($charset!=""){
               iconv($charset,"WINDOWS-1251",$dataHtml);
               iconv($charset,"WINDOWS-1251",$dataTxt);               
               }
                 if ($dataHtml != "") {
                 $msgBody = transformHTML($dataHtml);
                 } else {
                   $msgBody = ereg_replace("\n","<br>",$dataTxt);
                   $msgBody = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i","$1http://$2",    $msgBody);
                   $msgBody = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<A    TARGET=\"_blank\" HREF=\"$1\">$1</A>", $msgBody);
                   $msgBody = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<A    HREF=\"mailto:$1\">$1</A>",$msgBody);
                 }        
                $msgBody = preg_replace("'<a[^>]*? >.*?</a>'si","", $msgBody);         
                if ($dataHtml != "") {
                 $msgBody = $dataHtml;
                  $mailformat = "html";
                 } else {
                  $msgBody = ereg_replace("\n","<br>",$dataTxt);
                  $mailformat = "text";
                 }
                  
                 if ($mailformat == "text") {
                  echo "<html><head><title>Messagebody</title></head><body    bgcolor=\"white\">$msgBody</body></html>";
                 } else {
                  echo $msgBody;    
               
                 }
                
            //    
            //
            //ТУТ я бы отправлял ПИСЬМО НА ЯЩИК
            //
            //    
            $charset="";
            }     
        }
    }
  imap_close($stream);
  echo "<br><b> Disconnected from:</b> {$mailbox_from}<br>";
  
}
   //определяем тип 
   function get_mime_type(&$structure) {
   $primary_mime_type = array("TEXT", "MULTIPART","MESSAGE", "APPLICATION", "AUDIO","IMAGE", "VIDEO", "OTHER");
   if($structure->subtype) {
    return $primary_mime_type[(int) $structure->type] . '/' .$structure->subtype;
   }
    return "TEXT/PLAIN";
   }
   //взять кусок письма 
   function get_part($stream, $msg_number, $mime_type, $structure = false,$part_number    = false) {
   
    if(!$structure) {
        $structure = imap_fetchstructure($stream, $msg_number);
    }
    if($structure) {
        if($mime_type == get_mime_type($structure)) {
            if(!$part_number) {
                $part_number = "1";
            }
            
            $text = imap_fetchbody($stream, $msg_number, $part_number);
            if($structure->encoding == 3) {
                return imap_base64($text);
            } else if($structure->encoding == 4) {
                return imap_qprint($text);
    //    } else if($structure->encoding == 1) {
   //                return imap_8bit($text);
        } else {        
            return $text;
    }
        
    }
   $prefix ="";
        if($structure->type == 1) /* multipart */ {
        while(list($index, $sub_structure) = each($structure->parts)) {
            if($part_number) {
                $prefix = $part_number . '.';
            }
            $data = get_part($stream, $msg_number, $mime_type, $sub_structure,$prefix .    ($index + 1));
            if($data) {
                return $data;
            }
        } // END OF WHILE
        } // END OF MULTIPART
    } // END OF STRUTURE
    return false;
   }
   
   //шапки
   function transformHTML($str) {
   if ((strpos($str,"<HTML") < 0) || (strpos($str,"<html")    < 0)) {
        $makeHeader = "<html><head><meta http-equiv=\"Content-Type\"    content=\"text/html; charset=WINDOWS-1251;\"></head>\n";
    if ((strpos($str,"<BODY") < 0) || (strpos($str,"<body")    < 0)) {
        $makeBody = "\n<body>\n";
        $str = $makeHeader . $makeBody . $str ."\n</body></html>";
    } else {
        $str = $makeHeader . $str ."\n</html>";
    }
   } else {
    $str = "<meta http-equiv=\"Content-Type\" content=\"text/html;    charset=WINDOWS-1251;\">\n". $str;
   }
    return $str;
   }

?>


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.