我有一个脚本可以将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)
在本地计算机上,此邮件已通过此脚本传输。
有关执行的一些信息:
这是我的剧本:
一封邮件的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;
}
为什么它会破裂?
非常感谢您的帮助。
答案 0 :(得分:0)