2010-11-18 118 views
0

我使用PHP和IMAP。我需要从一个文件夹中检索20个最新的电子邮件。我用imap_sort按日期进行排序,但问题在于,对于包含700个或更多电子邮件的大文件夹,它需要很长时间。imap_sort限制结果数量?

有没有一种方法可以使用PHP IMAP按日期对消息进行排序,并只带来最新的20封电子邮件?

也许使用imap_search?

这里是我的代码:

$start_from = params::cleanDefault($_GET, 'start_from', 0); 
$limit  = params::cleanDefault($_GET, 'limit', 20); 
$sort_by  = params::cleanDefault($_GET, 'sort_by', 'SORTARRIVAL'); 

$emails = imap_sort($mbox, $sort_by, 1, SE_NOPREFETCH); 
$emails = array_slice($emails, $start_from, $limit); 

感谢。

回答

1

有没有简单的方法来做到这一点。

您已经通过sorting on SORTARRIVAL instead of SORTDATE最小化了PHP imap_*函数的c客户端库提取的数据。而且,虽然有an IMAP extension允许调用者请求SORT结果的子集(例如前20个点击),但很少有IMAP服务器支持它,而PHP无法使用它。

您可以尝试使用imap_search并要求提供自1天前以来收到的消息。如果没有足够的点击率,您可以重新搜索自2天前以来收到的消息。等等。但是这会让代码变得混乱,并且最终可能不会比你已经做的更快。