$nl = "
"; //ログインされたらセッションにホスト、ID、パス登録 if ($_POST['host'] && $_POST['user'] && $_POST['pass']) { $_SESSION['host'] = $_POST['host']; $_SESSION['user'] = $_POST['user']; $_SESSION['pass'] = $_POST['pass']; } //セッションが無い時はログイン画面 if (!isset($_SESSION['host'])) { echo <<
POPサーバー

アカウント

パスワード

EOD; exit; } else { $host = $_SESSION['host']; $user = $_SESSION['user']; $pass = $_SESSION['pass']; } //コマンド送信関数 function _sendcmd($cmd) { global $sock; fputs($sock, $cmd."\r\n"); $buf = fgets($sock, 512); if(substr($buf, 0, 3) == '+OK') { return $buf; } else { die($buf); } return false; } //POPサーバに接続 $sock = fsockopen($host, 110, $err, $errno, 10) or die("サーバーに接続できません"); $buf = fgets($sock, 512); if(substr($buf, 0, 3) != '+OK') die($buf); $buf = _sendcmd("USER $user"); $buf = _sendcmd("PASS $pass"); //個別表示 if ($_GET['view']) { $line = _sendcmd("RETR {$_GET['view']}");//RETR n -n番目のメッセージ取得(ヘッダ含) $start = false;//本文開始フラグ while (!ereg("^\.\r\n",$line)) {//EOFの.まで読む $line = mb_convert_encoding($line, "SJIS", "auto"); //From抽出 if (ereg("^From:",$line) && !$start) { if (eregi("(.*)=\?iso-2022-jp\?B\?([^\?]+)\?=(.*)",$line,$regs)) { $line = $regs[1].base64_decode($regs[2]).$regs[3]; } echo htmlspecialchars(mb_convert_encoding($line, "SJIS", "auto")),$nl; } //To抽出 if (ereg("^To:",$line) && !$start) { if (eregi("(.*)=\?iso-2022-jp\?B\?([^\?]+)\?=(.*)",$line,$regs)) { $line = $regs[1].base64_decode($regs[2]).$regs[3]; } echo htmlspecialchars(mb_convert_encoding($line, "SJIS", "auto")),$nl; } //件名の次でISO-200〜なら件名2行目 if ($subchk && eregi("^(.*)=\?iso-2022-jp\?B\?([^\?]+)\?=(.*)",$line,$regs)) { $line = $regs[1].base64_decode($regs[2]).$regs[3]; echo $subject,htmlspecialchars(mb_convert_encoding($line, "SJIS", "auto")),$nl; } elseif ($subchk) { echo $subject; } $subchk = false; //件名抽出 if (ereg("^Subject:",$line) && !$start) { if (eregi("(.*)=\?iso-2022-jp\?B\?([^\?]+)\?=(.*)",$line,$regs)) {//MIME Bデコード $line = $regs[1].base64_decode($regs[2]).$regs[3]; } $subject = htmlspecialchars(mb_convert_encoding($line, "SJIS", "auto")); $subchk = true; } if (trim($line)=="") $start = true;//最初に空だった所が本文?かなぁ if ($start) echo htmlspecialchars($line),$nl;//本文表示 $line = fgets($sock,512);//次の行取得 if(empty($line)) break;//空なら終る } //一覧表示 } else { $data = _sendcmd("STAT");//STAT -件数とサイズ取得 +OK 8 1234 sscanf($data, '+OK %d %d', $num, $size); echo "新着メッセージ $num 件",$nl,$nl; if ($num == "0") { $buf = _sendcmd("QUIT"); fclose($sock); session_destroy(); exit; } //メッセージの分だけループ for($i=1;$i<=$num;$i++) { $subj = ""; $line = _sendcmd("TOP $i 0");//TOP n line -n番目のを本文をline行取得(ヘッダ含)0ならヘッダのみ while (!ereg("^\.\r\n",$line)) { if (ereg("^Subject:", $line)) { $subj = ereg_replace("^[^:]+: *", "", $line); $regs = ""; if(eregi("(.*)=\?iso-2022-jp\?B\?([^\?]+)\?=(.*)",$subj,$regs)) $subj = $regs[1].base64_decode($regs[2]).$regs[3]; $subj = mb_convert_encoding($subj, "SJIS", "JIS"); } $line = fgets($sock,512); if(empty($line)) break; } if (trim($subj)=="") $subj = "(無題)"; echo "$i.$subj
\n"; } } $buf = _sendcmd("QUIT"); //バイバイ fclose($sock); ?>