⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phpop3.class.php

📁 一个基于页面实现的pop客户端程序
💻 PHP
字号:
<?php//////////////////////////////////////////////////////////////////// phPOP3clean() by James Heinrich <info@silisoftware.com>    ////  available at http://phpop3clean.sourceforge.net            ///////////////////////////////////////////////////////////////////class phPOP3 {	var $fp         = null;  // socket to POP3 server	var $echo       = false; // if true, commands and responses are displayed on screen	var $full_login = true;  // if true, "user@example.com" is used for login; if false only "user" is used for login	var $UIDcache	= array();	function phPOP3($hostname, $port, &$errno, &$errstr, $timeout=10, $echo=false) {		$this->echo = (bool) $echo;		if ($this->fp = @fsockopen($hostname, $port, $errno, $errstr, $timeout)) {			socket_set_timeout($this->fp, $timeout);			// constructor succeeded		}		// constructor failed, test for this with is_resource($object->fp)	}	function POP3login($username, $password, $hidepassword=false) {		if (!is_resource($this->fp)) {			$this->OutputToScreen('POP3login() failed -- !is_resource($this->fp)');			return false;		}		if (!$this->full_login && strpos($username, '@')) {			// change "user@example.com" to "user" (ignore domain)			list($username, $domain) = explode('@', $username);		}		$loginstatus = $this->ReadUntilResponse();		$this->OutputToScreen($loginstatus);		$this->OutputToScreen('<font color="orange">USER '.$username.'</font>'."\n");		@fwrite($this->fp, 'USER '.$username."\r\n");		$response_USER = $this->ReadUntilResponse();		$this->OutputToScreen($response_USER);		$this->OutputToScreen('<font color="orange">PASS '.($hidepassword ? str_repeat('*', strlen($password)) : $password).'</font>'."\n");		@fwrite($this->fp, 'PASS '.$password."\r\n");		$response_PASS = $this->ReadUntilResponse();		$this->OutputToScreen(htmlentities($response_PASS));		return $this->Succeeded($response_PASS);	}	function POP3logout() {		if (!is_resource($this->fp)) {			$this->OutputToScreen('POP3logout() failed -- !is_resource($this->fp)');			return false;		}		$this->OutputToScreen('<font color="orange">QUIT</font>'."\n");		fwrite($this->fp, 'QUIT'."\r\n");		$response_QUIT = $this->ReadUntilResponse();		fclose($this->fp);		$this->OutputToScreen(htmlentities($response_QUIT));		return $this->Succeeded($response_QUIT);	}	function POP3stat() {		if (!is_resource($this->fp)) {			$this->OutputToScreen('POP3stat() failed -- !is_resource($this->fp)');			return false;		}		$this->OutputToScreen('<font color="orange">STAT</font>'."\n");		fwrite($this->fp, 'STAT'."\r\n");		$response_STAT = $this->ReadUntilResponse();		$this->OutputToScreen(htmlentities($response_STAT));		@list($status, $num_messages, $total_bytes) = explode(' ', $response_STAT);		if (trim($status) == '+OK') {			return array(0=>$num_messages, 1=>$total_bytes);		}		return false;	}	function POP3delete($messagenumber) {		if (!is_resource($this->fp)) {			$this->OutputToScreen('POP3stat() failed -- !is_resource($this->fp)');			return false;		}		$this->OutputToScreen('<font color="orange">DELE '.$messagenumber.'</font>'."\n");		fwrite($this->fp, 'DELE '.$messagenumber."\r\n");		$response_DELE = $this->ReadUntilResponse();		$this->OutputToScreen(htmlentities($response_DELE));		return $this->Succeeded($response_DELE);	}	function POP3noop() {		if (!is_resource($this->fp)) {			$this->OutputToScreen('POP3noop() failed -- !is_resource($this->fp)');			return false;		}		$this->OutputToScreen('<font color="orange">NOOP</font>'."\n");		fwrite($this->fp, 'NOOP'."\r\n");		$response_NOOP = $this->ReadUntilResponse();		$this->OutputToScreen(htmlentities($response_NOOP));		return $this->Succeeded($response_NOOP);	}	function POP3getMessageHeader($messagenum) {		if (!is_resource($this->fp)) {			$this->OutputToScreen('POP3getMessageHeader() failed -- !is_resource($this->fp)');			return false;		}		$this->OutputToScreen('<font color="orange">TOP '.$messagenum.' 0</font>'."\n");		fwrite($this->fp, 'TOP '.$messagenum.' 0'."\r\n");		return str_replace('+OK headers follow.'."\r\n", '', $this->ReadUntilDot());	}	function POP3getMessageID($messagenum) {		if (!is_resource($this->fp)) {			$this->OutputToScreen('POP3getMessageID() failed -- !is_resource($this->fp)');			return false;		}		$this->OutputToScreen('<font color="orange">UIDL '.$messagenum.'</font>'."\n");		fwrite($this->fp, 'UIDL '.$messagenum."\r\n");		$messageid = trim($this->ReadUntilResponse(true));		$this->OutputToScreen($messageid."\n");		return str_replace($messagenum.' ', '', $messageid); // strip messageNum off beginning of MessageID	}	function POP3getMessageNumFromUID($messageid) {		if (!is_resource($this->fp)) {			$this->OutputToScreen('POP3getMessageNumFromUID() failed -- !is_resource($this->fp)');			return false;		}		if (count($this->UIDcache) === 0) {			//$this->OutputToScreen('<font color="orange">UIDL '.$messagenum.'</font>'."\n");			fwrite($this->fp, 'UIDL'."\r\n");			$UIDLdump = explode("\n", $this->ReadUntilDot());			foreach ($UIDLdump as $key => $value) {				@list($messagenumber, $UID) = explode(' ', trim($value), 2);				if (ereg('^[0-9]+$', $messagenumber)) {					$this->UIDcache[$UID] = $messagenumber;				}			}		}		return (@$this->UIDcache[$messageid] ? $this->UIDcache[$messageid] : false);	}	function POP3getMessageSize($messagenum) {		if (!is_resource($this->fp)) {			$this->OutputToScreen('POP3getMessageSize() failed -- !is_resource($this->fp)');			return false;		}		$this->OutputToScreen('<font color="orange">LIST '.$messagenum.'</font>'."\n");		fwrite($this->fp, 'LIST '.$messagenum."\r\n");		@list($id, $messagesize) = explode(' ', $this->ReadUntilResponse(true), 2);		return trim($messagesize);	}	function POP3getMessageContents($messagenum, $useRETR=false) {		if (!is_resource($this->fp)) {			$this->OutputToScreen('POP3getMessageContents() failed -- !is_resource($this->fp)');			return false;		}		if ($useRETR) {			$this->OutputToScreen('<font color="orange">RETR '.$messagenum.'</font>'."\n");			fwrite($this->fp, 'RETR '.$messagenum."\r\n");		} else {			$this->OutputToScreen('<font color="orange">TOP '.$messagenum.' 9999</font>'."\n");			fwrite($this->fp, 'TOP '.$messagenum.' 99999'."\r\n");		}		return str_replace('+OK headers follow.'."\r\n", '', $this->ReadUntilDot());	}	function ReadUntilDot() {		$data = '';		$exitloop = false;		while (true) {			if (!is_resource($this->fp)) {				$this->OutputToScreen('ReadUntilDot() failed -- !is_resource($this->fp)');				return false;			}			$thisline = fgets($this->fp, 1024);			if ($thisline === false) {				break;			}			// a single dot on a line by itself indicates end of returned data			if (rtrim($thisline, "\r\n") == '.') {				$exitloop = true;			}			// if a dot is the first character on a line, it is escaped with another dot			// so remove all leading dots			if (strlen($thisline) == 0) {				$exitloop = true;			} elseif (@$thisline{0} == '.') {				$thisline = substr($thisline, 1);			}			$data .= $thisline;			if ($exitloop) {				break;			}		}		return $data;	}	function ReadUntilResponse($postresponseonly=false) {		$data = '';		while (true) {			if (!is_resource($this->fp)) {				$this->OutputToScreen('ReadUntilResponse() failed -- !is_resource($this->fp)');				return false;			}			$buffer = fgets($this->fp, 1024);			$data .= $buffer;			$postresponse = '';			if (substr($buffer, 0, 3) == '+OK') {				$postresponse = ltrim(substr($buffer, 3));				break;			} elseif (substr($buffer, 0, 4) == '-ERR') {				$postresponse = ltrim(substr($buffer, 4));				break;			} elseif ($buffer == '') {				break;			}		}		if ($postresponseonly) {			return $postresponse;		}		return $data;	}	function Succeeded($response) {		@list($status, $message) = explode(' ', $response, 2);		if (ereg('^\\+OK', $status)) {			// succeeded			return true;		} elseif (ereg('^\\-ERR', $status)) {			// failed			return false;		}		// undefined response?		return null;	}	function OutputToScreen($text) {		if ($this->echo) {			echo nl2br($text);			flush();		}		return true;	}}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -