我使用Zend框架提供imap类来访问IMAP上的gmail消息。我逐一访问收件箱中所有邮件的消息头,并在本地对它们进行索引。对于邮件少于10000的收件箱,脚本可以正常工作。对于较大的收件箱,脚本会断开连接,可能是超时。
下面是堆栈跟踪:
异常消息:无法读取连接关闭?
追踪:
#0 /home/dev/trunk/Zend/Mail/Protocol/Imap.php(168):Zend_Protocol_Imap->_nextLine()
#1 /home/dev/trunk/Zend/Mail/Protocol/Imap.php(285):Zend_Mail_Protocol_Imap->_nextTaggedLine(NULL)
#2 /home/dev/trunk/Zend/Mail/Protocol/Imap.php(587):Zend_Protocol_Imap->readLine(NULL,'TAG103')
#3 /home/dev/trunk/Zend/Mail/Storage/Imap.php(353):Zend_Protocol_Imap->fetch(‘UID’,12267)
#4 /home/dev/trunk/model/gmail_imap_oauth.class.php(121):Zend_Storage_Imap->getUniqueId(12267)
是否有可能使连接持续更长时间?我正在通过命令行运行这个脚本,并尝试在php.ini中增加脚本最大运行时,这没有帮助。
发布于 2010-10-16 11:51:50
这里的功能
公共函数indexAllMails($startIndex=1) {
$this->_imap = new Zend_Mail_Protocol_Imap('imap.gmail.com', '993', true);
$authenticateParams = array('XOAUTH', $initClientRequestEncoded);
$this->_imap->requestAndResponse('AUTHENTICATE', $authenticateParams);
//Create the mail storage Object
$this->_storage = new Zend_Mail_Storage_Imap_Wrapper($this->_imap);
//Select Folder
$this->_storage->selectFolder("[Gmail]/All Mail");
$numMessagesTotal = $this->_storage->countMessages();
if($numMessagesTotal == 0 ) return true;
for($i=$startIndex;$i<=$numMessagesTotal;$i++)
{
try {
$uniqueId = $this->_storage->getUniqueId($i);
$message = $this->_storage->getMessage($i);
}
catch(Exception $ex)
{
log("Error getting Unique id",'index');
log($ex->getMessage(),'index');
log($ex->getTraceAsString(),'index');
if($ex->getMessage() == 'cannot read - connection closed?')
{
//Timeout :(
return true;
}
else
continue;
}
$from = $message->from;
echo $from;
}}
https://stackoverflow.com/questions/3937373
复制相似问题