pop3.php.tmp
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· TMP 代码 · 共 1,227 行 · 第 1/3 页
TMP
1,227 行
break; case 'APOP': $result = $this->_cmdApop( $uid , $pwd ); // if APOP fails fallback to USER auth if( PEAR::isError( $result ) ){ //echo "APOP FAILED!!!\n"; $result=$this->_authUSER( $uid , $pwd ); } break; case 'USER': $result = $this->_authUSER( $uid , $pwd ); break; default : $result = $this->_raiseError( "$method is not a supported authentication method" ); break; } return $result; } /* Authenticates the user using the USER-PASS method. * * @param string The userid to authenticate as. * @param string The password to authenticate with. * * @return mixed true on success or PEAR_Error on failure * * @access private * @since 1.0 */ function _authUSER($user, $pass ) { if ( PEAR::isError($ret=$this->_cmdUser($user) ) ){ return $ret; } if ( PEAR::isError($ret=$this->_cmdPass($pass) ) ){ return $ret; } return true; } /* Authenticates the user using the PLAIN method. * * @param string The userid to authenticate as. * @param string The password to authenticate with. * * @return array Returns an array containing the response * * @access private * @since 1.0 */ function _authPLAIN($user, $pass ) { $cmd=sprintf('AUTH PLAIN %s', base64_encode( chr(0) . $user . chr(0) . $pass ) ); if ( PEAR::isError( $ret = $this->_send($cmd) ) ) { return $ret; } if ( PEAR::isError( $challenge = $this->_recvLn() ) ){ return $challenge; } if( PEAR::isError($ret=$this->_checkResponse($challenge) )){ return $ret; } return true; } /* Authenticates the user using the PLAIN method. * * @param string The userid to authenticate as. * @param string The password to authenticate with. * * @return array Returns an array containing the response * * @access private * @since 1.0 */ function _authLOGIN($user, $pass ) { $this->_send('AUTH LOGIN'); if ( PEAR::isError( $challenge = $this->_recvLn() ) ) { return $challenge; } if( PEAR::isError($ret=$this->_checkResponse($challenge) )){ return $ret; } if ( PEAR::isError( $ret = $this->_send(sprintf('%s', base64_encode($user))) ) ) { return $ret; } if ( PEAR::isError( $challenge = $this->_recvLn() ) ) { return $challenge; } if( PEAR::isError($ret=$this->_checkResponse($challenge) )){ return $ret; } if ( PEAR::isError( $ret = $this->_send(sprintf('%s', base64_encode($pass))) ) ) { return $ret; } if ( PEAR::isError( $challenge = $this->_recvLn() ) ) { return $challenge; } return $this->_checkResponse($challenge); } /* Authenticates the user using the CRAM-MD5 method. * * @param string The userid to authenticate as. * @param string The password to authenticate with. * * @return array Returns an array containing the response * * @access private * @since 1.0 */ function _authCRAM_MD5($uid, $pwd ) { if ( PEAR::isError( $ret = $this->_send( 'AUTH CRAM-MD5' ) ) ) { return $ret; } if ( PEAR::isError( $challenge = $this->_recvLn() ) ) { return $challenge; } if( PEAR::isError($ret=$this->_checkResponse($challenge) )){ return $ret; } // remove '+ ' $challenge=substr($challenge,2); $challenge = base64_decode( $challenge ); $cram = &Auth_SASL::factory('crammd5'); $auth_str = base64_encode( $cram->getResponse( $uid , $pwd , $challenge ) ); if ( PEAR::isError($error = $this->_send( $auth_str ) ) ) { return $error; } if ( PEAR::isError( $ret = $this->_recvLn() ) ) { return $ret; } //echo "RET:$ret\n"; return $this->_checkResponse($ret); } /* Authenticates the user using the DIGEST-MD5 method. * * @param string The userid to authenticate as. * @param string The password to authenticate with. * @param string The efective user * * @return array Returns an array containing the response * * @access private * @since 1.0 */ function _authDigest_MD5($uid, $pwd) { if ( PEAR::isError( $ret = $this->_send( 'AUTH DIGEST-MD5' ) ) ) { return $ret; } if ( PEAR::isError( $challenge = $this->_recvLn() ) ) { return $challenge; } if( PEAR::isError($ret=$this->_checkResponse($challenge) )){ return $ret; } // remove '+ ' $challenge=substr($challenge,2); $challenge = base64_decode( $challenge ); $digest = &Auth_SASL::factory('digestmd5'); $auth_str = base64_encode($digest->getResponse($uid, $pwd, $challenge, "localhost", "pop3" )); if ( PEAR::isError($error = $this->_send( $auth_str ) ) ) { return $error; } if ( PEAR::isError( $challenge = $this->_recvLn() ) ) { return $challenge; } if( PEAR::isError($ret=$this->_checkResponse($challenge) )){ return $ret; } /* * We don't use the protocol's third step because POP3 doesn't allow * subsequent authentication, so we just silently ignore it. */ if ( PEAR::isError( $challenge = $this->_send("\r\n") ) ) { return $challenge ; } if ( PEAR::isError( $challenge = $this->_recvLn() ) ) { return $challenge; } return $this->_checkResponse($challenge); } /* * Sends the APOP command * * @param $user Username to send * @param $pass Password to send * @return bool Success/Failure */ function _cmdApop($user, $pass) { if ($this->_state == NET_POP3_STATE_AUTHORISATION) { if (!empty($this->_timestamp)) { if(PEAR::isError($data = $this->_sendCmd('APOP ' . $user . ' ' . md5($this->_timestamp . $pass)) ) ){ return $data; } $this->_state = NET_POP3_STATE_TRANSACTION; return true; } } return $this->_raiseError('Not In NET_POP3_STATE_AUTHORISATION State1'); } /* * Returns the raw headers of the specified message. * * @param integer $msg_id Message number * @return mixed Either raw headers or false on error */ function getRawHeaders($msg_id) { if ($this->_state == NET_POP3_STATE_TRANSACTION) { return $this->_cmdTop($msg_id, 0); } return false; } /* * Returns the headers of the specified message in an * associative array. Array keys are the header names, array * values are the header values. In the case of multiple headers * having the same names, eg Received:, the array value will be * an indexed array of all the header values. * * @param integer $msg_id Message number * @return mixed Either array of headers or false on error */ function getParsedHeaders($msg_id) { if ($this->_state == NET_POP3_STATE_TRANSACTION) { $raw_headers = rtrim($this->getRawHeaders($msg_id)); $raw_headers = preg_replace("/\r\n[ \t]+/", ' ', $raw_headers); // Unfold headers $raw_headers = explode("\r\n", $raw_headers); foreach ($raw_headers as $value) { $name = substr($value, 0, $pos = strpos($value, ':')); $value = ltrim(substr($value, $pos + 1)); if (isset($headers[$name]) AND is_array($headers[$name])) { $headers[$name][] = $value; } elseif (isset($headers[$name])) { $headers[$name] = array($headers[$name], $value); } else { $headers[$name] = $value; } } return $headers; } return false; } /* * Returns the body of the message with given message number. * * @param integer $msg_id Message number * @return mixed Either message body or false on error */ function getBody($msg_id) { if ($this->_state == NET_POP3_STATE_TRANSACTION) { $msg = $this->_cmdRetr($msg_id); return substr($msg, strpos($msg, "\r\n\r\n")+4); } return false; } /* * Returns the entire message with given message number. * * @param integer $msg_id Message number * @return mixed Either entire message or false on error */ function getMsg($msg_id) { if ($this->_state == NET_POP3_STATE_TRANSACTION) { return $this->_cmdRetr($msg_id); } return false; } /* * Returns the size of the maildrop * * @return mixed Either size of maildrop or false on error */ function getSize() { if ($this->_state == NET_POP3_STATE_TRANSACTION) { if (isset($this->_maildrop['size'])) { return $this->_maildrop['size']; } else { list(, $size) = $this->_cmdStat(); return $size; } } return false; } /* * Returns number of messages in this maildrop * * @return mixed Either number of messages or false on error */ function numMsg() { if ($this->_state == NET_POP3_STATE_TRANSACTION) { if (isset($this->_maildrop['num_msg'])) { return $this->_maildrop['num_msg']; } else { list($num_msg, ) = $this->_cmdStat(); return $num_msg; } } return false; } /* * Marks a message for deletion. Only will be deleted if the * disconnect() method is called. * * @param integer $msg_id Message to delete * @return bool Success/Failure */ function deleteMsg($msg_id) { if ($this->_state == NET_POP3_STATE_TRANSACTION) { return $this->_cmdDele($msg_id); }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?