imapprotocol.php
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 2,423 行 · 第 1/5 页
PHP
2,423 行
{
//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);
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('SETQUOTAROOT', $param );
}
/********************************************************************
*** RFC2087 IMAP4 QUOTA extension ENDS HERE
********************************************************************/
/********************************************************************
*** RFC2086 IMAP4 ACL extension BEGINS HERE
********************************************************************/
function cmdSetACL($mailbox_name, $user, $acl)
{
//Check if the IMAP server has ACL support
if( ! $this->hasAclSupport() ){
return new PEAR_Error("This IMAP server does not support ACL's! ");
}
$mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox_name) );
$user_name=sprintf("\"%s\"",$this->utf_7_encode($user) );
if(is_array($acl)){
$acl=implode('',$acl);
}
return $this->_genericCommand('SETACL', sprintf("%s %s \"%s\"",$mailbox_name,$user_name,$acl) );
}
function cmdDeleteACL($mailbox_name, $user)
{
//Check if the IMAP server has ACL support
if( ! $this->hasAclSupport() ){
return new PEAR_Error("This IMAP server does not support ACL's! ");
}
$mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox_name) );
return $this->_genericCommand('DELETEACL', sprintf("%s \"%s\"",$mailbox_name,$user) );
}
function cmdGetACL($mailbox_name)
{
//Check if the IMAP server has ACL support
if( ! $this->hasAclSupport() ){
return new PEAR_Error("This IMAP server does not support ACL's! ");
}
$mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox_name) );
$ret = $this->_genericCommand('GETACL', sprintf("%s",$mailbox_name) );
if(isset( $ret["PARSED"] ) ){
$ret['PARSED']=$ret["PARSED"][0]["EXT"];
}
return $ret;
}
function cmdListRights($mailbox_name, $user)
{
//Check if the IMAP server has ACL support
if( ! $this->hasAclSupport() ){
return new PEAR_Error("This IMAP server does not support ACL's! ");
}
$mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox_name) );
$ret = $this->_genericCommand('LISTRIGHTS', sprintf("%s \"%s\"",$mailbox_name,$user) );
if(isset( $ret["PARSED"] ) ){
$ret["PARSED"]=$ret["PARSED"][0]["EXT"];
}
return $ret;
}
function cmdMyRights($mailbox_name)
{
//Check if the IMAP server has ACL support
if( ! $this->hasAclSupport() ){
return new PEAR_Error("This IMAP server does not support ACL's! ");
}
$mailbox_name=sprintf("\"%s\"",$this->utf_7_encode($mailbox_name) );
$ret = $this->_genericCommand('MYRIGHTS', sprintf("%s",$mailbox_name) );
if(isset( $ret["PARSED"] ) ){
$ret["PARSED"]=$ret["PARSED"][0]["EXT"];
}
return $ret;
}
/********************************************************************
*** RFC2086 IMAP4 ACL extension ENDs HERE
********************************************************************/
/*******************************************************************************
*** draft-daboo-imap-annotatemore-05 IMAP4 ANNOTATEMORE extension BEGINS HERE
********************************************************************************/
function cmdSetAnnotation($mailbox_name, $entry, $values)
{
// Check if the IMAP server has ANNOTATEMORE support
if(!$this->hasAnnotateMoreSupport()) {
return new PEAR_Error('This IMAP server does not support the ANNOTATEMORE extension!');
}
if (!is_array($values)) {
return new PEAR_Error('Invalid $values argument passed to cmdSetAnnotation');
}
$vallist = '';
foreach ($values as $name => $value) {
$vallist .= "\"$name\" \"$value\" ";
}
$vallist = rtrim($vallist);
return $this->_genericCommand('SETANNOTATION', sprintf('"%s" "%s" (%s)', $mailbox_name, $entry, $vallist));
}
function cmdDeleteAnnotation($mailbox_name, $entry, $values)
{
// Check if the IMAP server has ANNOTATEMORE support
if(!$this->hasAnnotateMoreSupport()) {
return new PEAR_Error('This IMAP server does not support the ANNOTATEMORE extension!');
}
if (!is_array($values)) {
return new PEAR_Error('Invalid $values argument passed to cmdDeleteAnnotation');
}
$vallist = '';
foreach ($values as $name) {
$vallist .= "\"$name\" NIL ";
}
$vallist = rtrim($vallist);
return $this->_genericCommand('SETANNOTATION', sprintf('"%s" "%s" (%s)', $mailbox_name, $entry, $vallist));
}
function cmdGetAnnotation($mailbox_name, $entries, $values)
{
// Check if the IMAP server has ANNOTATEMORE support
if(!$this->hasAnnotateMoreSupport()) {
return new PEAR_Error('This IMAP server does not support the ANNOTATEMORE extension!');
}
$entlist = '';
if (!is_array($entries)) {
$entries = array($entries);
}
foreach ($entries as $name) {
$entlist .= "\"$name\" ";
}
$entlist = rtrim($entlist);
if (count($entries) > 1) {
$entlist = "($entlist)";
}
$vallist = '';
if (!is_array($values)) {
$values = array($values);
}
foreach ($values as $name) {
$vallist .= "\"$name\" ";
}
$vallist = rtrim($vallist);
if (count($values) > 1) {
$vallist = "($vallist)";
}
return $this->_genericCommand('GETANNOTATION', sprintf('"%s" %s %s', $mailbox_name, $entlist, $vallist));
}
/*****************************************************************************
*** draft-daboo-imap-annotatemore-05 IMAP4 ANNOTATEMORE extension ENDs HERE
******************************************************************************/
/********************************************************************
***
*** HERE ENDS THE EXTENSIONS FUNCTIONS
*** AND BEGIN THE AUXILIARY FUNCTIONS
***
********************************************************************/
/**
* tell if the server has capability $capability
*
* @return true or false
*
* @access public
* @since 1.0
*/
function getServerAuthMethods()
{
if( $this->_serverAuthMethods == null ){
$this->cmdCapability();
return $this->_serverAuthMethods;
}
return false;
}
/**
* tell if the server has capability $capability
*
* @return true or false
*
* @access public
* @since 1.0
*/
function hasCapability($capability)
{
if( $this->_serverSupportedCapabilities == null ){
$this->cmdCapability();
}
if($this->_serverSupportedCapabilities != null ){
if( in_array( $capability , $this->_serverSupportedCapabilities ) ){
return true;
}
}
return false;
}
/**
* tell if the server has Quota support
*
* @return true or false
*
* @access public
* @since 1.0
*/
function hasQuotaSupport()
{
return $this->hasCapability('QUOTA');
}
/**
* tell if the server has Quota support
*
* @return true or false
*
* @access public
* @since 1.0
*/
function hasAclSupport()
{
return $this->hasCapability('ACL');
}
/**
* tell if the server has support for the ANNOTATEMORE extension
*
* @return true or false
*
* @access public
* @since 1.0
*/
function hasAnnotateMoreSupport()
{
return $this->hasCapability('ANNOTATEMORE');
}
/**
* Parses the responses like RFC822.SIZE and INTERNALDATE
*
* @param string the IMAP's server response
*
* @return string containing the parsed response
* @access private
* @since 1.0
*/
function _parseOneStringResponse(&$str, $line,$file)
{
$this->_parseSpace($str , $line , $file );
$size = $this->_getNextToken($str,$uid);
return $uid;
}
/**
* Parses the FLAG response
*
* @param string the IMAP's server response
*
* @return Array containing the parsed response
* @access private
* @since 1.0
*/
function _parseFLAGSresponse(&$str)
{
$this->_parseSpace($str , __LINE__ , __FILE__ );
$params_arr[] = $this->_arrayfy_content($str);
$flags_arr=array();
for( $i = 0 ; $i < count($params_arr[0]) ; $i++ ){
$flags_arr[] = $params_arr[0][$i];
}
return $flags_arr;
}
/**
* Parses the BODY response
*
* @param string the IMAP's server response
*
* @return Array containing the parsed response
* @access private
* @since 1.0
*/
function _parseBodyResponse(&$str, $command){
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?