_connect($servername, $port); if (!$conn) return false; $this->server_connection = $conn; $auth = $this->_authorise($username, $password); if (!$auth) return false; } function _connect($servername='', $port='') { if (!$servername || !$port) return false; $socket = fsockopen($servername, $port, $errno, $errstr, $this->timeout); if (!$socket) { $this->errormsg = $errstr; return false; } return $socket; } function _authorise($username='', $password='') { if (!$this->server_connection) return false; $result = fgets($this->server_connection, 4096); // connection successful result.. we can safely ignore this one. fputs($this->server_connection, "USER " . addslashes($username) . "\r\n"); $result = fgets($this->server_connection, 4096); fputs($this->server_connection, "PASS " . addslashes($password) . "\r\n"); $result = fgets($this->server_connection, 4096); if (!preg_match('/OK/', $result)) { $this->errormsg = $result; return false; } $this->authorised = 1; return true; } function stat() { if (!$this->server_connection || !$this->authorised) return false; fputs($this->server_connection, "STAT\r\n"); $result = fgets($this->server_connection, 4096); list($status, $emailcount, $size) = explode(' ', $result); if (!preg_match('/OK/', $status)) { $this->errormsg = $status; return false; } return $emailcount; } function quit() { if (!$this->server_connection) return false; fputs($this->server_connection, "QUIT\r\n"); fclose($this->server_connection); unset($this->server_connection); return true; } function check_message_exists($messageid=0) { if ($messageid <= 0) return false; if (!$this->server_connection || !$this->authorised) return false; // make sure this message is actually there. fputs($this->server_connection, "LIST " . $messageid . "\r\n"); $result = trim(fgets($this->server_connection, 4096)); if (!preg_match('/OK/', $result)) return false; return true; } function fetch_header($messageid=0) { if ($messageid <= 0) return false; if (!$this->server_connection || !$this->authorised) return false; if (!$this->check_message_exists($messageid)) return false; // fetch as necessary. fputs($this->server_connection, "TOP " . $messageid . " 0\r\n"); $header = ''; $result = trim(fgets($this->server_connection, 4096)); while($result != '.') { $result = trim(fgets($this->server_connection, 4096)); if ($result != '.') $header .= $result ."\n"; } return $header; } function fetch_message($messageid=0) { if ($messageid <= 0) return false; if (!$this->server_connection || !$this->authorised) return false; if (!$this->check_message_exists($messageid)) return false; fputs($this->server_connection, "TOP " . $messageid . "\r\n"); $email = ''; $result = trim(fgets($this->server_connection, 4096)); while($result != '.') { $result = trim(fgets($this->server_connection, 4096)); if ($result != '.') $email .= $result ."\n"; } return $email; } function fetch_message_only($messageid=0) { if ($messageid <= 0) return false; if (!$this->server_connection || !$this->authorised) return false; if (!$this->check_message_exists($messageid)) return false; $header = &$this->fetch_header($messageid); fputs($this->server_connection, "TOP " . $messageid . "\r\n"); $email = ''; $result = trim(fgets($this->server_connection, 4096)); while($result != '.') { $result = trim(fgets($this->server_connection, 4096)); if ($result != '.') $email .= $result ."\n"; } // get rid of the header from the message. $email = str_replace($header, '', $email); return $email; } function get_error() { return $this->errormsg; } } ?>