我用来Zend_Mail_Storage_Pop3
从给定的邮件服务器获取邮件。现在,问题是该框架提供了一种从存储中获取所有邮件的方法Zend_Mail_Storage_Pop3::getMessages()
(因此,问题是,我如何在一个框中获取一些而不是所有邮件(更像 SQL LIMIT 语句),以便我可以对“结果集”进行分页。
谢谢你。
我用来Zend_Mail_Storage_Pop3
从给定的邮件服务器获取邮件。现在,问题是该框架提供了一种从存储中获取所有邮件的方法Zend_Mail_Storage_Pop3::getMessages()
(因此,问题是,我如何在一个框中获取一些而不是所有邮件(更像 SQL LIMIT 语句),以便我可以对“结果集”进行分页。
谢谢你。
此类功能不可用。但是,所有邮件都有一个以 1 开头的编号。如果您只是阅读电子邮件,那么您可以缓存上次打开的邮件编号,下次从这个(缓存的)编号开始检索电子邮件。另一种解决方案是缓存所有打开的消息(阅读更多),但诀窍是在这种情况下如何使缓存无效。
快速示例:
$mail = new Zend_Mail_Storage_Imap(array('host' => 'localhost',
'user' => 'root',
'password' => '******'));
$cachedId = (apc_exists('email_id') ? apc_fetch('email_id') + 1 : 1);
for ($id = $cachedId ; $id <= $mail->countMessages() ; $id++) {
echo sprintf('%d, %s <br/>', $id, $mail->getMessage($id)->subject);
}
apc_store('email_id', $mail->countMessages());
我可能有点晚了,但是 Zend_Mail_Storage 类的分页是直截了当的。它们都实现了迭代器接口,并且可以与LimitIterator
for 分页结合使用。唯一的问题是它们以 1 而不是 0 开头,因为这是所有邮件接口所做的。
所以这就是你要做的:
$mail = new Zend_Mail_Storage_Pop3(/* ... */);
foreach (new LimitIterator($mail, 1 + $offset, $limit + $offset) as $message) {
// ...
}