imap_body休息

时间:2011-05-14 08:58:44

标签: php email imap

我有一个脚本可以将Mails从一个源IMAP-Server传输到目标IMAP-Server。 我已经在我的xampp本地编写了这个脚本,eclipse是IDE。 本地它工作正常。但没有INTERNALDATE。因为我的XAMPP-PHP版本已经老了。

所以我将脚本移动到运行 PHP 5.3.6-pl0-gentoo 的服务器。

第1步:
在开始时,脚本会将一个Box的所有邮件缓存到FileSystem上的文件(FileCache)。

第2步:
将IMAP-Connection-Ressource更改为目标IMAP-Mailbox后,脚本将在所有缓存的邮件上执行“imap_append”,以将此邮件写入目标IMAP-Mailbox。

我再说一遍,这个脚本在本地机器上运行正常(没有INTERNALDATE)! INTERNALDATE仅用于imap_append。所以第一步(缓存)与INTERNALDATE无关!

我的问题:
在缓存邮件时,它会在4 **邮件后中断。它每次都是相同的邮件,它打破了。 它每次都在“imap_body”上打破这个邮件没什么特别的:带附件的普通html(1x 32MB 7z-File)

在本地计算机上,此邮件已通过此脚本传输。

有关执行的一些信息:

  1. PHP的执行超时设置为3 小时(脚本运行3分钟 在它破裂之前)。
  2. PHP的内存限制设置为1GB (机器有2GB)脚本正在使用 在它破裂之前63MB。
  3. PHP的套接字超时设置为3 小时。
  4. 加载此特殊标题 邮件在两个系统上运行良好。 只有加载身体才会破裂。
  5. 在我的分析中,它在“call_user_func_array”之后直接中断 “imap_body”
  6. 这是我的剧本:

    一封邮件的RawHeader吸气器

    /**
     * Getter of $_rawHeader
     * @access public
     * @return Content of $_rawHeader
     */
    public function getRawHeader($update=false) {
            if(!$this->_rawHeader || $update) {
                    $cachename = urlencode('imap_'.$this->getIMAP()->getInstanceName().$this->getIndex().'_rawheader');
                    if(!($this->_rawHeader = $this->Cache()->get($cachename)) || $update) {
                            $this->_rawHeader = $this->getIMAP()->fetchheader($this->getIndex());
                            $this->Cache()->set($cachename, $this->_rawHeader, 2592000);
                            SYSLOG::debug($this->_rawHeader);
                    }
            }
            return $this->_rawHeader;
    }
    

    一个邮件的RawBody的吸气器

    /**
     * Getter of $_rawBody
     * @access public
     * @return Content of $_rawBody
     */
    public function getRawBody($update=false) {
            if(!$this->_rawBody || $update) {
                    $cachename = urlencode('imap_'.$this->getIMAP()->getInstanceName().$this->getIndex().'_rawbody');
                    if(!($this->_rawBody = $this->Cache()->get($cachename)) || $update) {
                            SYSLOG::debug($this->getIMAP()->body($this->getIndex()));
                            $this->_rawBody = $this->getIMAP()->body($this->getIndex());
                            SYSLOG::debug($this->_rawBody);
                            $this->Cache()->set($cachename, $this->_rawBody, 2592000);
                    }
            }
            return $this->_rawBody;
    }
    

    IMAP-Class上的呼叫功能:

    /**
     * Catch not accessable Method-Calls
     *
     * @param String Methodname
     * @param String Arguments
     *
     * This Method is for calling IMAP-Functions without "imap_" präfix
     * Possilbe Methods are: Look at http://de3.php.net/manual/en/ref.imap.php
     *
     * @link http://de3.php.net/manual/en/ref.imap.php
     *
     * @return null || Function-Return
     */
    public function __call($function, $arguments) {
            //SYSLOG::debug('Call Function "imap_'.$function.'" on IMAP-Connection: '.$this->getAddress().':'.$this->getUsername());
            if(function_exists('imap_'.$function)) {
                    //Filtered Function that doesn't need Handle
                    $filter = array(
                            '8bit',
                            'alerts',
                            'base64',
                            'binary',
                            'errors',
                            'last_error',
                            'mail_compose',
                            'mime_header_decode',
                            'qprint',
                            'rfc822_parse_adrlist',
                            'rfc822_parse_headers',
                            'rfc822_write_address',
                            'timeout',
                            'utf7_decode',
                            'utf7_encode',
                            'utf8'
                    );
                    //SYSLOG::info($this->_handle);
                    if($function == 'reopen' && !$this->_handle) {
                            if(!$this->open()) {
                                    return false;
                            }
                    }
    
                    //Make sure that the Connection is open if its needed
                    if(in_array($function, $filter) || $function == 'reopen' || $this->open()) {
                            if(!in_array($function, $filter)) {
                                    // Prepend the imap resource to the arguments array
                                    array_unshift($arguments, $this->_handle);
                            }
                            // Call the PHP function
                            $func = 'imap_'.$function;
                            //SYSLOG::debug($arguments);
                            SYSLOG::debug('Call Function "'.$func.'" on IMAP-Connection: '.$this->getAddress().':'.$this->getUsername());
                            $result = call_user_func_array($func, $arguments);
                            //SYSLOG::debug($result);
                            return $result;
                    } else {
                            SYSLOG::warning('IMAP-Connection not available! Call-Function: "imap_'.$function.'" aborted!');
                    }
            } else {
                    SYSLOG::error('Call-Function: "imap_'.$function.'" does not exist!');
            }
            return null;
    }
    

    为什么它会破裂?

    非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)