Start · Sprachen · PHP · Referenz · imap_sort

imap_sort

Funktion

Sortiert die Nachrichten eines IMAP-Postfachs nach einem bestimmten Kriterium und gibt ein Array mit den sortierten Nachrichten-Nummern zurück.

seit PHP 4.0.0 Kategorie: http

Signatur

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

Beschreibung

imap_sort() ruft die Nachrichten des aktuell geöffneten IMAP-Postfachs ab und sortiert sie nach dem angegebenen Kriterium. Die Funktion gibt ein Array mit den Nachrichten-Nummern in der gewünschten Reihenfolge zurück, die anschließend z. B. mit imap_fetchheader() oder imap_fetch_overview() weiterverarbeitet werden können.

Das Sortierkriterium wird über ganzzahlige Konstanten wie SORTDATE, SORTFROM, SORTSUBJECT, SORTTO, SORTCC oder SORTSIZE festgelegt. Mit dem Parameter $reverse kann die Sortierreihenfolge umgekehrt werden, sodass z. B. die neuesten Nachrichten zuerst erscheinen.

Optional können über $search_criteria nur Nachrichten einbezogen werden, die einem bestimmten IMAP-Suchausdruck entsprechen (analog zu imap_search()). Der Parameter $charset legt den für die Suche zu verwendenden Zeichensatz fest.

Die Funktion ist besonders nützlich beim Bau von Webmail-Anwendungen oder E-Mail-Verwaltungstools, bei denen Nachrichten sortiert und gefiltert angezeigt werden sollen, ohne alle Daten manuell laden und sortieren zu müssen.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine aktive IMAP-Verbindungsinstanz, die von imap_open() zurückgegeben wurde.
$criteria Pflicht int Das Sortierkriterium. Mögliche Werte: SORTDATE (Datum), SORTFROM (Absender), SORTSUBJECT (Betreff), SORTTO (Empfänger), SORTCC (CC), SORTSIZE (Größe).
$reverse Pflicht bool Wenn true, wird die Sortierung umgekehrt (absteigende Reihenfolge). Bei false wird aufsteigend sortiert.
$flags int 0 Optionale Flags. Derzeit wird nur SE_UID unterstützt: Gibt bei gesetztem Flag UIDs statt Nachrichten-Nummern zurück.
$search_criteria string|null null Optionaler IMAP-Suchausdruck (z. B. 'UNSEEN' oder 'FROM "example@example.com"'), um nur bestimmte Nachrichten zu berücksichtigen.
$charset string|null null Zeichensatz, der beim Auswerten des Suchausdrucks verwendet wird, z. B. 'UTF-8'. Wird null übergeben, verwendet der Server seinen Standard-Zeichensatz.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array mit Nachrichten-Nummern (oder UIDs, wenn SE_UID gesetzt) in sortierter Reihenfolge zurück. Im Fehlerfall wird false zurückgegeben.

Beispiele

Nachrichten nach Datum absteigend sortieren

<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'passwort');

if (!$imap) {
    die('Verbindung fehlgeschlagen: ' . imap_last_error());
}

// Nachrichten nach Datum sortieren, neueste zuerst
$sortedMsgNums = imap_sort($imap, SORTDATE, true);

if ($sortedMsgNums === false) {
    die('Sortierung fehlgeschlagen.');
}

foreach (array_slice($sortedMsgNums, 0, 5) as $msgNum) {
    $overview = imap_fetch_overview($imap, $msgNum);
    if ($overview) {
        echo 'Betreff: ' . $overview[0]->subject . PHP_EOL;
        echo 'Von: '    . $overview[0]->from    . PHP_EOL;
        echo 'Datum: '  . $overview[0]->date    . PHP_EOL;
        echo '---' . PHP_EOL;
    }
}

imap_close($imap);
Betreff: Re: Teambesprechung Von: chef@example.com Datum: Mon, 20 May 2024 09:15:00 +0200 --- ...

Nur ungelesene Nachrichten nach Größe sortieren

<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'passwort');

if (!$imap) {
    die('Verbindung fehlgeschlagen.');
}

// Nur ungelesene Nachrichten nach Größe aufsteigend sortieren
$sortedMsgNums = imap_sort($imap, SORTSIZE, false, 0, 'UNSEEN');

if ($sortedMsgNums === false) {
    die('Sortierung fehlgeschlagen.');
}

echo 'Ungelesene Nachrichten (kleinste zuerst): ' . count($sortedMsgNums) . PHP_EOL;

foreach ($sortedMsgNums as $msgNum) {
    $overview = imap_fetch_overview($imap, $msgNum);
    if ($overview) {
        echo $overview[0]->size . ' Bytes – ' . $overview[0]->subject . PHP_EOL;
    }
}

imap_close($imap);
Ungelesene Nachrichten (kleinste zuerst): 3 1024 Bytes – Kurze Notiz 5120 Bytes – Bericht Mai 20480 Bytes – Präsentation Anhang

// Wichtig · Fallstricke

Deprecation-Hinweis: Ab PHP 8.1 wurden die prozeduralen IMAP-Funktionen als veraltet markiert; das zurückgegebene Verbindungs-Handle ist nun vom Typ IMAP\Connection statt resource. Die Erweiterung wird voraussichtlich in einer zukünftigen Version ausgelagert oder entfernt.

Sicherheit: Wird $search_criteria aus Benutzereingaben befüllt, muss die Eingabe sorgfältig validiert und bereinigt werden, da unsichere Suchausdrücke zu unerwünschtem Verhalten auf dem IMAP-Server führen können.

Performance: Bei sehr großen Postfächern kann imap_sort() langsam sein, da intern alle Nachrichten ausgewertet werden müssen. Eine Kombination mit aussagekräftigen Suchkriterien reduziert die Ergebnismenge und verbessert die Performance.

Rückgabewert: Das zurückgegebene Array enthält immer Nachrichten-Nummern, die sich ändern können, wenn Nachrichten im Postfach gelöscht oder verschoben werden. Für dauerhafte Referenzen sollte stattdessen das SE_UID-Flag verwendet werden.