1

我用来Zend_Mail_Storage_Pop3从给定的邮件服务器获取邮件。现在,问题是该框架提供了一种从存储中获取所有邮件的方法Zend_Mail_Storage_Pop3::getMessages()(因此,问题是,我如何在一个框中获取一些而不是所有邮件(更像 SQL LIMIT 语句),以便我可以对“结果集”进行分页。

谢谢你。

4

2 回答 2

1

此类功能不可用。但是,所有邮件都有一个以 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());
于 2013-06-18T02:59:47.647 回答
0

我可能有点晚了,但是 Zend_Mail_Storage 类的分页是直截了当的。它们都实现了迭代器接口,并且可以与LimitIteratorfor 分页结合使用。唯一的问题是它们以 1 而不是 0 开头,因为这是所有邮件接口所做的。

所以这就是你要做的:

$mail = new Zend_Mail_Storage_Pop3(/* ... */); 
foreach (new LimitIterator($mail, 1 + $offset, $limit + $offset) as $message) {
    // ...
}
于 2014-04-15T07:45:45.787 回答