Signatur
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
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);
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);
// 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.