我正在使用PHP与IMAP。我需要从文件夹中检索20个最新的电子邮件。我使用imap_sort按日期排序,但问题是对于包含700多封电子邮件的大型文件夹需要很长时间。
有没有办法可以使用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);
感谢。
答案 0 :(得分:1)
没有直接的方法可以做到。
您已经通过sorting on SORTARRIVAL
instead of SORTDATE
最小化了PHP imap_*
函数下的c-client库提取的数据。而且,虽然有an IMAP extension允许调用者请求SORT
结果的子集(例如前20个命中),但很少有IMAP服务器支持它,PHP无法使用它。
您可以尝试使用imap_search
并询问自1天前到达的消息。如果没有足够的点击量,您可以重新搜索自2天前到达的消息。等等。但是这可能会让代码变得混乱,并且它可能不会比你已经做的更快。