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

Criteria 只能是以下其中一個:

reverse

是否以相反順序排序。

flags

flags 是一個位元遮罩,由以下一個或多個組成:

search_criteria

IMAP2 格式的搜尋條件字串。詳情請參閱 imap_search()

charset

排序字串時使用的 MIME 字元集。

回傳值

返回一個根據給定參數排序的郵件編號陣列,如果失敗則返回 false

更新日誌

版本 說明
8.1.0 imap 參數現在需要一個 IMAP\Connection 實例;以前需要一個有效的 imap 資源
8.0.0 reverse 現在是 布林值 而不是 整數
8.0.0 search_criteriacharset 現在可以是 null
新增筆記

使用者貢獻的筆記 1 則筆記

antoine dot spam-nono at maxg dot info
18 年前
自從我寫了一個完整的網頁郵件程式以來,我一直在使用 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