PHP Conference Nagoya 2025

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

Одно (и только одно) из следующих значений:

  • SORTDATE - сортировать по дате
  • SORTARRIVAL - дата получения
  • SORTFROM - по первому адресу в поле From
  • SORTSUBJECT - по теме письма
  • SORTTO - по первому адресу в поле To
  • SORTCC - по первому адресу в поле cc
  • SORTSIZE - по размеру сообщения

reverse

Определяет сортировку в обратном порядке.

flags

Параметр flags задаётся битовой маской одной или нескольких констант:

  • SE_UID - возвращать UID, а не номера сообщений
  • SE_NOPREFETCH - не извлекать найденные сообщения

search_criteria

Строка с поисковым критерием в формате IMAP2. Подробнее смотрите в описании функции imap_search().

charset

Кодировка MIME для использования при сортировке строк.

Возвращаемые значения

Возвращает массив номеров сообщений, отсортированных в соответствии с заданными параметрами или false, если возникла ошибка.

Список изменений

Версия Описание
8.1.0 Параметр imap теперь ожидает экземпляр класса IMAP\Connection; раньше параметр ждал ресурс (resource) imap.
8.0.0 reverse теперь является логическим типом (bool) вместо целого числа (int).
8.0.0 search_criteria и charset теперь являются nullable.
Добавить

Примечания пользователей 1 note

up
9
antoine dot spam-nono at maxg dot info
18 years ago
I worked a lot with IMAP functions since I wrote a complete webmail and I've got a little tip about the imap_sort function :

There is a big difference between :

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

The first command will issue a
>> 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)

While the second resulted in
>> FETCH 1:last (UID INTERNALDATE RFC822.SIZE FLAGS)

As a result, using SORTDATE took 3 seconds longer to complete on a 800-emails mailbox, while the results are quite the same (except if you have to deal with forged dates or timezones, but the arrival order is far more logical)

My advice if you sort your emails by arrival is to actually use SORTARRIVAL, or better don't use imap_sort and go straight with message numbers (not UIDs). On large mailboxes, if you display messages per page, you will have significant performance increases (by avoiding 5 seconds of sorting).
To Top