imapprotocol.php.svn-base
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 2,517 行 · 第 1/5 页
SVN-BASE
2,517 行
return $args; } /* * We don't use the protocol's third step because IMAP doesn't allow * subsequent authentication, so we just silently ignore it. */ if ( PEAR::isError( $error = $this->_send( "\r\n" ) ) ) { return $error; } } /* Authenticates the user using the CRAM-MD5 method. * * @param string The userid to authenticate as. * @param string The password to authenticate with. * @param string The cmdID. * * @return array Returns an array containing the response * * @access private * @since 1.0 */ function _authCRAM_MD5($uid, $pwd, $cmdid) { if ( PEAR::isError($error = $this->_putCMD( $cmdid ,"AUTHENTICATE" , "CRAM-MD5") ) ) { return $error; } if ( PEAR::isError( $args = $this->_recvLn() ) ) { return $args; } $this->_getNextToken( $args , $plus ); $this->_getNextToken( $args , $space ); $this->_getNextToken( $args , $challenge ); $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."\r\n" ) ) ) { return $error; } } /* Authenticates the user using the LOGIN method. * * @param string The userid to authenticate as. * @param string The password to authenticate with. * @param string The cmdID. * * @return array Returns an array containing the response * * @access private * @since 1.0 */ function _authLOGIN($uid, $pwd, $cmdid) { if (PEAR::isError($error = $this->_putCMD($cmdid,"AUTHENTICATE", "LOGIN"))) { return $error; } if (PEAR::isError($args = $this->_recvLn() )) { return $args; } $this->_getNextToken( $args , $plus ); $this->_getNextToken( $args , $space ); $this->_getNextToken( $args , $challenge ); $challenge = base64_decode( $challenge ); $auth_str = base64_encode( "$uid" ); if ( PEAR::isError( $error = $this->_send( $auth_str."\r\n" ) ) ) { return $error; } if (PEAR::isError( $args = $this->_recvLn() ) ) { return $args; } $auth_str = base64_encode( "$pwd" ); if ( PEAR::isError($error = $this->_send( $auth_str."\r\n" ) ) ) { return $error; } } /** * Returns the name of the best authentication method that the server * has advertised. * * @param string if !=null,authenticate with this method ($userMethod). * * @return mixed Returns a string containing the name of the best * supported authentication method or a PEAR_Error object * if a failure condition is encountered. * @access private * @since 1.0 */ function _getBestAuthMethod($userMethod = null) { $this->cmdCapability(); if($userMethod != null ){ $methods = array(); $methods[] = $userMethod; }else{ $methods = $this->supportedAuthMethods; } if( ($methods != null) && ($this->_serverAuthMethods != null)){ foreach ( $methods as $method ) { if ( in_array( $method , $this->_serverAuthMethods ) ) { return $method; } } $serverMethods=implode(',' ,$this->_serverAuthMethods); $myMethods=implode(',' ,$this->supportedAuthMethods); return new PEAR_Error("$method NOT supported authentication method!. This IMAP server " . "supports these methods: $serverMethods, but I support $myMethods"); }else{ return new PEAR_Error("This IMAP server don't support any Auth methods"); } } /** * Attempt to disconnect from the iMAP server. * * @return array Returns an array containing the response * * @access public * @since 1.0 */ function cmdLogout() { if( !$this->_connected ){ return new PEAR_Error( 'not connected!' ); } $cmdid = $this->_getCmdId(); if ( PEAR::isError( $error = $this->_putCMD( $cmdid , 'LOGOUT' ) ) ) { return $error; } if ( PEAR::isError($args = $this->_getRawResponse() ) ) { return $args; } if (PEAR::isError( $this->_socket->disconnect() ) ) { return new PEAR_Error('socket disconnect failed'); } return $args; // not for now //return $this->_genericImapResponseParser($args,$cmdid); } /** * Send the NOOP command. * * @return array Returns an array containing the response * * @access public * @since 1.0 */ function cmdNoop() { return $this->_genericCommand('NOOP'); } /** * Send the CHECK command. * * @return array Returns an array containing the response * * @access public * @since 1.0 */ function cmdCheck() { return $this->_genericCommand('CHECK'); } /** * Send the Select Mailbox Command * * @param string The mailbox to select. * * @return array Returns an array containing the response * * @access public * @since 1.0 */ function cmdSelect($mailbox) { $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox) ); if( !PEAR::isError( $ret= $this->_genericCommand('SELECT', $mailbox_name) ) ){ $this->currentMailbox = $mailbox; } return $ret; } /** * Send the EXAMINE Mailbox Command * * @param string The mailbox to examine. * @return array Returns an array containing the response * * @access public * @since 1.0 */ function cmdExamine($mailbox) { $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox) ); $ret=$this->_genericCommand('EXAMINE', $mailbox_name); $parsed=''; if(isset( $ret["PARSED"] ) ){ for($i=0;$i<count($ret["PARSED"]); $i++){ $command=$ret["PARSED"][$i]["EXT"]; $parsed[key($command)]=$command[key($command)]; } } return array("PARSED"=>$parsed,"RESPONSE"=>$ret["RESPONSE"]); } /** * Send the CREATE Mailbox Command * * @param string The mailbox to create. * @return array Returns an array containing the response * * @access public * @since 1.0 */ function cmdCreate($mailbox) { $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox) ); return $this->_genericCommand('CREATE', $mailbox_name); } /** * Send the RENAME Mailbox Command * * @param string The old mailbox name. * @param string The new (renamed) mailbox name. * * @return array Returns an array containing the response * * @access public * @since 1.0 */ function cmdRename($mailbox, $new_mailbox) { $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox) ); $new_mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($new_mailbox) ); return $this->_genericCommand('RENAME', "$mailbox_name $new_mailbox_name" ); } /** * Send the DELETE Mailbox Command * * @param string The mailbox name to delete. * * @return array Returns an array containing the response * * @access public * @since 1.0 */ function cmdDelete($mailbox) { $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox) ); return $this->_genericCommand('DELETE', $mailbox_name); } /** * Send the SUSCRIBE Mailbox Command * * @param string The mailbox name to suscribe. * * @return array Returns an array containing the response * * @access public * @since 1.0 */ function cmdSubscribe($mailbox) { $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox) ); return $this->_genericCommand('SUBSCRIBE', $mailbox_name ); } /** * Send the UNSUSCRIBE Mailbox Command * * @return mixed Returns a PEAR_Error with an error message on any * kind of failure, or true on success. * @access public * @since 1.0 */ function cmdUnsubscribe($mailbox) { $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox) ); return $this->_genericCommand('UNSUBSCRIBE', $mailbox_name ); } /** * Send the FETCH Command * * @return mixed Returns a PEAR_Error with an error message on any * kind of failure, or true on success. * @access public * @since 1.0 */ function cmdFetch($msgset, $fetchparam) { return $this->_genericCommand('FETCH' , "$msgset $fetchparam" ); } /** * Send the CAPABILITY Command * * @return mixed Returns a PEAR_Error with an error message on any * kind of failure, or true on success. * @access public * @since 1.0 */ function cmdCapability() { $ret = $this->_genericCommand( 'CAPABILITY' ); if(isset( $ret["PARSED"] ) ){ $ret["PARSED"]=$ret["PARSED"][0]["EXT"]["CAPABILITY"]; //fill the $this->_serverAuthMethods and $this->_serverSupportedCapabilities arrays foreach( $ret["PARSED"]["CAPABILITIES"] as $auth_method ){ if( strtoupper( substr( $auth_method , 0 ,5 ) ) == "AUTH=" ) $this->_serverAuthMethods[] = substr( $auth_method , 5 ); } // Keep the capabilities response to use ir later $this->_serverSupportedCapabilities = $ret["PARSED"]["CAPABILITIES"]; } return $ret; } /** * Send the STATUS Mailbox Command * * @param string $mailbox the mailbox name * @param string $request the request status it could be: * MESSAGES | RECENT | UIDNEXT * UIDVALIDITY | UNSEEN * @return array Returns a Parsed Response * * @access public * @since 1.0 */ function cmdStatus($mailbox, $request) { $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox) ); if( $request!="MESSAGES" && $request!="RECENT" && $request!="UIDNEXT" && $request!="UIDVALIDITY" && $request!="UNSEEN" ){ // TODO: fix this error! $this->_prot_error("request '$request' is invalid! see RFC2060!!!!" , __LINE__ , __FILE__, false ); } $ret = $this->_genericCommand('STATUS', "$mailbox_name ($request)" ); if(isset( $ret["PARSED"] ) ){ $ret['PARSED']=$ret["PARSED"][count($ret['PARSED'])-1]["EXT"]; } return $ret; }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?