代码之家  ›  专栏  ›  技术社区  ›  aviv

imap_sort限制结果的数量?

  •  0
  • aviv  · 技术社区  · 15 年前

    我正在将PHP与IMAP结合使用。我需要从一个文件夹中检索20封最新的电子邮件。我使用imap_按日期排序,但问题是对于一个有700多封电子邮件的大文件夹,它需要很长时间。

    有没有一种方法可以使用php-imap按日期对邮件进行排序,并且只带最近20封邮件?

    也许使用imap_搜索?

    这是我的代码:

    $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 回复  |  直到 15 年前
        1
  •  1
  •   dkarp    15 年前

    没有直接的方法。

    您已经将底层PHP的C客户端库获取的数据最小化了。 imap_* 功能 sorting on SORTARRIVAL instead of SORTDATE . 而且,尽管有 an IMAP extension 允许调用者请求 SORT 结果(例如前20次点击),很少有IMAP服务器支持它,而PHP无法利用它。

    你可以尝试使用 imap_search 并询问从一天前到现在的信息。如果点击量不够,可以重新搜索2天前收到的邮件。等等。但这可能会使代码变得混乱,最终可能不会比您已经做的快。

    推荐文章