Новичок
Профиль
Группа: Участник
Сообщений: 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; }
?>
|
|