open($server, $port); } function smtpmail($from, $to, $message) { $this->to = $to; $this->from = $from; if ($this->helo() == false) return false; if ($this->mailfrom($from) == false) return false; for ($i = 0; $i < count($to); $i++) { if ($this->rcptto($to[$i]) == false) return false; } if ($this->body($message) == false) return false; $this->quit() == false; return true; } function open($server, $port) { if ((@$this->socket = fsockopen($server, $port)) <= 0) return false; while (true) { $this->line = fgets($this->socket, 1024); $this->status["LASTRESULT"] = substr($this->line, 0, 1); $this->status["LASTRESULTTXT"] = substr($this->line, 0, 1024); if ($this->line[3] == " ") break; if (!($this->line)) break; } if ($this->status["LASTRESULT"] <> "2") return false; return true; } function helo() { if (!(fputs($this->socket, "HELO localhost\r\n"))) return false; $this->line = fgets($this->socket, 1024); $this->status["LASTRESULT"] = substr($this->line, 0, 1); $this->status["LASTRESULTTXT"] = substr($this->line, 0, 1024); if ($this->status["LASTRESULT"] <> "2") return false; return true; } function mailfrom($from) { if (!(fputs($this->socket, "MAIL From:<$from>\r\n"))) return false; $this->line = fgets($this->socket, 1024); $this->status["LASTRESULT"] = substr($this->line, 0, 1); $this->status["LASTRESULTTXT"] = substr($this->line, 0, 1024); if ($this->status["LASTRESULT"] <> "2") return false; return true; } function rcptto($to) { if (!(fputs($this->socket, "RCPT To:$to\r\n"))) return false; $this->line = fgets($this->socket, 1024); $this->status["LASTRESULT"] = substr($this->line, 0, 1); $this->status["LASTRESULTTXT"] = substr($this->line, 0, 1024); if ($this->status["LASTRESULT"] <> "2") return false; return true; } function body($message) { if (!(fputs($this->socket, "DATA\r\n"))) return false; $this->line = fgets($this->socket, 1024); $this->status["LASTRESULT"] = substr($this->line, 0, 1); $this->status["LASTRESULTTXT"] = substr($this->line, 0, 1024); if ($this->status["LASTRESULT"] <> "3") return false; $message .= "\r\n.\r\n"; if (!(fputs($this->socket, $message, strlen($message)))) return false; $this->line = fgets($this->socket, 1024); $this->status["LASTRESULT"] = substr($this->line, 0, 1); $this->status["LASTRESULTTXT"] = substr($this->line, 0, 1024); if (substr($this->line, 0, 1) <> "2") return false; return true; } function quit() { fputs($this->socket, "QUIT\r\n"); $this->line = fgets($this->socket, 1024); $this->status["LASTRESULT"] = substr($this->line, 0, 1); $this->status["LASTRESULTTXT"] = substr($this->line, 0, 1024); return true; } function close() { fclose($this->socket); } } class pop3 { var $Socket; var $Line; var $Status; var $num_msg; function pop3($server, $port = 110, &$connected) { $connected = $this->open($server, $port); } function open($server, $port) { if (@($this->Socket = fsockopen($server, $port)) <= 0) return false; $this->Line = fgets($this->Socket, 1024); $this->Status["LASTRESULT"] = substr($this->Line, 0, 1); $this->Status["LASTRESULTTXT"] = substr($this->Line, 0, 1024); if ($this->Status["LASTRESULT"] <> "+") return false; return true; } function user($user) { if (!(fputs($this->Socket, "USER $user\r\n"))) return false; $this->Line = fgets($this->Socket, 1024); $this->Status["LASTRESULT"] = substr($this->Line, 0, 1); $this->Status["LASTRESULTTXT"] = substr($this->Line, 0, 1024); if ($this->Status["LASTRESULT"] <> "+") return false; return true; } function pass($pass) { if (!(fputs($this->Socket, "PASS $pass\r\n"))) return false; $this->Line = fgets($this->Socket, 1024); $this->Status["LASTRESULT"] = substr($this->Line, 0, 1); $this->Status["LASTRESULTTXT"] = substr($this->Line, 0, 1024); if ($this->Status["LASTRESULT"] <> "+") return false; return true; } function pop3_stat() { if (!(fputs($this->Socket, "STAT\r\n"))) return false; $this->Line = fgets($this->Socket, 1024); $this->Status["LASTRESULT"] = substr($this->Line, 0, 1); $this->Status["LASTRESULTTXT"] = substr($this->Line, 0, 1024); if ($this->Status["LASTRESULT"] <> "+") return false; list($x, $count, $size) = explode(" ", $this->Line); return $count; } function login($user, $pass) { if (!($this->user($user))) return false; if (!($this->pass($pass))) return false; $this->num_msg = $this->pop3_stat(); return true; } function pop3_list($nr) { if (!(fputs($this->Socket, "LIST $nr\r\n"))) return false; $this->Line = fgets($this->Socket, 1024); $this->Status["LASTRESULT"] = substr($this->Line, 0, 1); $this->Status["LASTRESULTTXT"] = substr($this->Line, 0, 1024); if ($this->Status["LASTRESULT"] <> "+") return false; list($x, $count, $size) = explode(" ", $this->Line); return $size; } function retr($nr, $file) { if (!(fputs($this->Socket, "RETR $nr\r\n"))) return false; $this->Line = fgets($this->Socket, 1024); $this->Status["LASTRESULT"] = substr($this->Line, 0, 1); $this->Status["LASTRESULTTXT"] = substr($this->Line, 0, 1024); if ($this->Status["LASTRESULT"] <> "+") return false; while (($this->Line = fgets($this->Socket, 1024)) <> ".\r\n") { if (!($this->Line)) return false; fwrite($file, $this->Line, strlen($this->Line)); $this->Line = ""; } return true; } function uidl($nr) { if (!(fputs($this->Socket, "UIDL $nr\r\n"))) return false; $this->Line = fgets($this->Socket, 1024); $this->Status["LASTRESULT"] = substr($this->Line, 0, 1); $this->Status["LASTRESULTTXT"] = substr($this->Line, 0, 1024); if ($this->Status["LASTRESULT"] <> "+") return false; $uidl = trim($this->Line); $uidl = trim(substr($uidl, strrpos($uidl, " ") + 1, strlen($uidl) - strrpos($uidl, " ") - 1)); $uidl = strtr($uidl, "/\\:*?\"<>|", "---------"); return $uidl; } function dele($nr) { if (!(fputs($this->Socket, "DELE $nr\r\n"))) return false; $this->Line = fgets($this->Socket, 1024); $this->Status["LASTRESULT"] = substr($this->Line, 0, 1); $this->Status["LASTRESULTTXT"] = substr($this->Line, 0, 1024); if ($this->Status["LASTRESULT"] <> "+") return false; return true; } function quit() { if (!(fputs($this->Socket, "QUIT\r\n"))) return false; $this->Line = fgets($this->Socket, 1024); $this->Status["LASTRESULT"] = substr($this->Line, 0, 1); $this->Status["LASTRESULTTXT"] = substr($this->Line, 0, 1024); if ($this->Status["LASTRESULT"] <> "+") return false; return true; } function close() { fclose($this->Socket); } } ?>