PHP Conference Japan 2024

imap_sort

(PHP 4, PHP 5, PHP 7, PHP 8)

imap_sort获取并排序邮件

描述

imap_sort(
    IMAP\Connection $imap,
    int $criteria,
    bool $reverse,
    int $flags = 0,
    ?string $search_criteria = null,
    ?string $charset = null
): array|false

根据给定的参数获取并排序邮件编号。

参数

imap

一个 IMAP\Connection 实例。

criteria

条件可以是以下之一(且只能是其中之一)

reverse

是否以相反的顺序排序。

flags

flags 是以下一个或多个的位掩码

search_criteria

IMAP2 格式的搜索条件字符串。有关详细信息,请参阅 imap_search()

charset

排序字符串时要使用的 MIME 字符集。

返回值

返回一个根据给定参数排序的邮件编号数组,或者在失败时返回 false

变更日志

版本 描述
8.1.0 imap 参数现在期望一个 IMAP\Connection 实例;以前,期望一个有效的 imap 资源
8.0.0 reverse 现在是 bool 而不是 int
8.0.0 search_criteriacharset 现在是 可空的。
添加注释

用户贡献的注释 1 条注释

9
antoine dot spam-nono at maxg dot info
18 年前
自从我编写了一个完整的 Web 邮件以来,我就大量使用了 IMAP 函数,并且对 imap_sort 函数有一些小技巧

两者之间存在很大差异

<?php
imap_sort
($imap, SORTDATE, 1);
// 和
imap_sort($imap, SORTARRIVAL, 1);
?>

第一个命令将发出
>> FETCH 1:last (UID ENVELOPE BODY.PEEK[HEADER.FIELDS (Newsgroups Content-MD5 Content-Disposition Content-Language Content-Location Followup-To References)] INTERNALDATE RFC822.SIZE FLAGS)

而第二个命令导致
>> FETCH 1:last (UID INTERNALDATE RFC822.SIZE FLAGS)

因此,在 800 封邮件的邮箱中,使用 SORTDATE 需要额外 3 秒才能完成,而结果几乎相同(除非您必须处理伪造的日期或时区,但到达顺序更符合逻辑)

如果您按到达时间排序邮件,我的建议是实际使用 SORTARRIVAL,或者更好的是不要使用 imap_sort 并直接使用邮件编号(而不是 UID)。在大型邮箱中,如果您每页显示邮件,您将获得显着的性能提升(通过避免 5 秒的排序)。
To Top