imapprotocol.php.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 2,517 行 · 第 1/5 页

SVN-BASE
2,517
字号
    /**     * Send the  LIST  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 cmdList($mailbox_base, $mailbox)    {        $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox) );        $mailbox_base=sprintf("\"%s\"",$this->utf_7_encode($mailbox_base) );        return $this->_genericCommand('LIST', "$mailbox_base $mailbox_name" );    }    /**     * Send the  LSUB  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 cmdLsub($mailbox_base, $mailbox)    {        $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox) );        $mailbox_base=sprintf("\"%s\"",$this->utf_7_encode($mailbox_base) );        return $this->_genericCommand('LSUB', "$mailbox_base $mailbox_name" );    }    /**     * Send the  APPEND  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 cmdAppend($mailbox, $msg , $flags_list = '' ,$time = '')    {        if(!$this->_connected){            return new PEAR_Error('not connected!');        }        $cmdid=$this->_getCmdId();        $msg_size=strlen($msg);        $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox) );        // TODO:        // Falta el codigo para que flags list y time hagan algo!!        if( $this->hasCapability( "LITERAL+" ) == true ){            $param=sprintf("%s %s%s{%s+}\r\n%s",$mailbox_name,$flags_list,$time,$msg_size,$msg);            if (PEAR::isError($error = $this->_putCMD($cmdid , 'APPEND' , $param ) ) ) {                return $error;            }        }else{            $param=sprintf("%s %s%s{%s}\r\n",$mailbox_name,$flags_list,$time,$msg_size);            if (PEAR::isError($error = $this->_putCMD($cmdid , 'APPEND' , $param ) ) ) {            return $error;            }            if (PEAR::isError($error = $this->_recvLn() ) ) {            return $error;            }            if (PEAR::isError($error = $this->_send( $msg ) ) ) {            return $error;            }        }        $args=$this->_getRawResponse($cmdid);        $ret = $this->_genericImapResponseParser($args,$cmdid);        return $ret;    }    /**     * Send the CLOSE 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 cmdClose()    {        return $this->_genericCommand('CLOSE');    }    /**     * Send the EXPUNGE 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 cmdExpunge()    {        $ret=$this->_genericCommand('EXPUNGE');        if(isset( $ret["PARSED"] ) ){           $parsed=$ret["PARSED"];            unset($ret["PARSED"]);            foreach($parsed as $command){                if( strtoupper($command["COMMAND"]) == 'EXPUNGE' ){                        $ret["PARSED"][$command["COMMAND"]][]=$command["NRO"];                }else{                        $ret["PARSED"][$command["COMMAND"]]=$command["NRO"];                }            }        }        return $ret;    }    /**     * Send the SEARCH 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 cmdSearch($search_cmd)    {        /*        if($_charset != '' )                    $_charset = "[$_charset] ";                $param=sprintf("%s%s",$charset,$search_cmd);        */        $ret = $this->_genericCommand('SEARCH', $search_cmd );        if(isset( $ret["PARSED"] ) ){            $ret["PARSED"]=$ret["PARSED"][0]["EXT"];        }        return $ret;    }    /**     * Send the STORE command.     *     * @param string $message_set  the sessage_set     * @param string $dataitem: the way we store the flags     *          FLAGS: replace the flags whith $value     *          FLAGS.SILENT: replace the flags whith $value but don't return untagged responses     *     *          +FLAGS: Add the flags whith $value     *          +FLAGS.SILENT: Add the flags whith $value but don't return untagged responses     *     *          -FLAGS: Remove the flags whith $value     *          -FLAGS.SILENT: Remove the flags whith $value but don't return untagged responses     *     * @param string $value     * @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 cmdStore($message_set, $dataitem, $value)    {        /* As said in RFC2060...        C: A003 STORE 2:4 +FLAGS (\Deleted)        S: * 2 FETCH FLAGS (\Deleted \Seen)        S: * 3 FETCH FLAGS (\Deleted)        S: * 4 FETCH FLAGS (\Deleted \Flagged \Seen)        S: A003 OK STORE completed        */        if( $dataitem!="FLAGS" && $dataitem!="FLAGS.SILENT" && $dataitem!="+FLAGS" &&            $dataitem!="+FLAGS.SILENT" && $dataitem!="-FLAGS" && $dataitem!="-FLAGS.SILENT" ){            $this->_prot_error("dataitem '$dataitem' is invalid! see RFC2060!!!!" , __LINE__ , __FILE__ );        }        $param=sprintf("%s %s (%s)",$message_set,$dataitem,$value);        return $this->_genericCommand('STORE', $param );    }    /**     * Send the COPY 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 cmdCopy($message_set, $mailbox)    {        $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox) );        return $this->_genericCommand('COPY', sprintf("%s %s",$message_set,$mailbox_name) );    }    function cmdUidFetch($msgset, $fetchparam)    {        return $this->_genericCommand('UID FETCH', sprintf("%s %s",$msgset,$fetchparam) );    }    function cmdUidCopy($message_set, $mailbox)    {        $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox) );        return $this->_genericCommand('UID COPY', sprintf("%s %s",$message_set,$mailbox_name) );    }     /**     * Send the UID STORE command.     *     * @param string $message_set  the sessage_set     * @param string $dataitem: the way we store the flags     *          FLAGS: replace the flags whith $value     *          FLAGS.SILENT: replace the flags whith $value but don't return untagged responses     *     *          +FLAGS: Add the flags whith $value     *          +FLAGS.SILENT: Add the flags whith $value but don't return untagged responses     *     *          -FLAGS: Remove the flags whith $value     *          -FLAGS.SILENT: Remove the flags whith $value but don't return untagged responses     *     * @param string $value     * @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 cmdUidStore($message_set, $dataitem, $value)    {        /* As said in RFC2060...        C: A003 STORE 2:4 +FLAGS (\Deleted)        S: * 2 FETCH FLAGS (\Deleted \Seen)        S: * 3 FETCH FLAGS (\Deleted)        S: * 4 FETCH FLAGS (\Deleted \Flagged \Seen)        S: A003 OK STORE completed        */        if( $dataitem!="FLAGS" && $dataitem!="FLAGS.SILENT" && $dataitem!="+FLAGS" &&            $dataitem!="+FLAGS.SILENT" && $dataitem!="-FLAGS" && $dataitem!="-FLAGS.SILENT" ){            $this->_prot_error("dataitem '$dataitem' is invalid! see RFC2060!!!!" , __LINE__ , __FILE__ );        }        return $this->_genericCommand('UID STORE', sprintf("%s %s (%s)",$message_set,$dataitem,$value) );    }    /**     * Send the SEARCH 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 cmdUidSearch($search_cmd)    {        $ret=$this->_genericCommand('UID SEARCH', sprintf("%s",$search_cmd) );        if(isset( $ret["PARSED"] ) ){            $ret["PARSED"]=$ret["PARSED"][0]["EXT"];        }        return $ret;    }    /**     * Send the X 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 cmdX($atom, $parameters)    {        return $this->_genericCommand("X$atom", $parameters );    }/**************************************************************************             HERE ENDS the RFC2060 IMAPS FUNCTIONS***             AND BEGIN THE EXTENSIONS FUNCTIONS***********************************************************************//***********************************************************************             RFC2087 IMAP4 QUOTA extension BEGINS HERE********************************************************************/    /**     * Send the GETQUOTA command.     *     * @param string $mailbox_name the mailbox name to query for quota data     * @return mixed Returns a PEAR_Error with an error message on any     *               kind of failure, or quota data on success     * @access public     * @since  1.0     */    function cmdGetQuota($mailbox_name)    {        //Check if the IMAP server has QUOTA support        if( ! $this->hasQuotaSupport() ){            return new PEAR_Error("This IMAP server does not support QUOTA's! ");        }        $mailbox_name=sprintf("%s",$this->utf_7_encode($mailbox_name) );        $ret = $this->_genericCommand('GETQUOTA', $mailbox_name );        if(isset( $ret["PARSED"] ) ){        // remove the array index because the quota response returns only 1 line of output            $ret['PARSED']=$ret["PARSED"][0];        }        return $ret;    }    /**     * Send the GETQUOTAROOT command.     *     * @param string $mailbox_name the mailbox name to query for quota data     * @return mixed Returns a PEAR_Error with an error message on any     *               kind of failure, or quota data on success     * @access public     * @since  1.0     */    function cmdGetQuotaRoot($mailbox_name)    {        //Check if the IMAP server has QUOTA support        if( ! $this->hasQuotaSupport() ){            return new PEAR_Error("This IMAP server does not support QUOTA's! ");        }        $mailbox_name=sprintf("%s",$this->utf_7_encode($mailbox_name) );        $ret = $this->_genericCommand('GETQUOTAROOT', $mailbox_name );        if(isset( $ret["PARSED"] ) ){        // remove the array index because the quota response returns only 1 line of output            $ret['PARSED']=$ret["PARSED"][0];        }        return $ret;    }    /**     * Send the SETQUOTA command.     *     * @param string $mailbox_name the mailbox name to query for quota data     * @param string $storageQuota sets the max number of bytes this mailbox can handle     * @param string $messagesQuota sets the max number of messages this mailbox can handle     * @return mixed Returns a PEAR_Error with an error message on any     *               kind of failure, or quota data on success     * @access public     * @since  1.0     */// TODO:  implement the quota by number of emails!!    function cmdSetQuota($mailbox_name, $storageQuota = null ,$messagesQuota = null )    {        //Check if the IMAP server has QUOTA support        if( ! $this->hasQuotaSupport() ){            return new PEAR_Error("This IMAP server does not support QUOTA's! ");        }        if( ($messagesQuota == null) && ( $storageQuota == null) ){            return new PEAR_Error('$storageQuota and $messagesQuota parameters can\'t be both null if you want to use quota');        }        $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox_name) );        //Make the command request        $param=sprintf("%s (",$mailbox_name);        if($storageQuota != null ){            $param=sprintf("%sSTORAGE %s",$param,$storageQuota);            if( $messagesQuota != null ){                //if we have both types of quota on the same call we must append an space between                // those parameters                $param=sprintf("%s ",$param);            }        }        if($messagesQuota != null ){            $param=sprintf("%sMESSAGES %s",$param,$messagesQuota);        }        $param=sprintf("%s)",$param);        return $this->_genericCommand('SETQUOTA', $param );    }    /**     * Send the SETQUOTAROOT command.     *     * @param string $mailbox_name the mailbox name to query for quota data     * @param string $storageQuota sets the max number of bytes this mailbox can handle     * @param string $messagesQuota sets the max number of messages this mailbox can handle     * @return mixed Returns a PEAR_Error with an error message on any     *               kind of failure, or quota data on success     * @access public     * @since  1.0     */    function cmdSetQuotaRoot($mailbox_name, $storageQuota = null ,$messagesQuota = null)    {        //Check if the IMAP server has QUOTA support        if( ! $this->hasQuotaSupport() ){            return new PEAR_Error("This IMAP server does not support QUOTA's! ");        }        if( ($messagesQuota == null) && ( $storageQuota == null) ){            return new PEAR_Error('$storageQuota and $messagesQuota parameters can\'t be both null if you want to use quota');        }        $mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox_name) );        //Make the command request        $param=sprintf("%s (",$mailbox_name);        if($storageQuota != null ){            $param=sprintf("%sSTORAGE %s",$param,$storageQuota);

⌨️ 快捷键说明

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