Start · Sprachen · PHP · Referenz · imap_list

imap_list

Funktion

Gibt eine Liste aller Postfächer (Mailboxen) zurück, die auf dem IMAP-Server dem angegebenen Muster entsprechen.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_list(IMAP\Connection $imap, string $reference, string $pattern): array|false

Beschreibung

imap_list() fragt einen IMAP-Server nach allen verfügbaren Postfächern ab, die der Referenz und dem Suchmuster entsprechen. Die Funktion gibt ein Array mit vollständig qualifizierten Postfach-Namen zurück, die direkt für weitere IMAP-Operationen (z. B. imap_open()) genutzt werden können.

Der Parameter $reference entspricht dem Basis-Pfad auf dem Server, etwa {imap.example.com} bei Remote-Servern. Mit dem Parameter $pattern kann die Auswahl auf bestimmte Postfach-Muster eingeschränkt werden. Das Zeichen * steht dabei für beliebig viele Zeichen (rekursiv über alle Ebenen), während % nur innerhalb einer Ebene der Postfach-Hierarchie sucht.

Die Funktion eignet sich besonders dazu, dem Benutzer alle vorhandenen Ordner eines E-Mail-Kontos aufzulisten, etwa um einen Ordner-Baum in einer Webmail-Anwendung darzustellen oder automatisiert alle Unterordner eines Postfachs zu verarbeiten.

Hinweis: Ab PHP 8.1 wird der erste Parameter als IMAP\Connection-Objekt übergeben. In früheren PHP-Versionen war dies eine Ressource vom Typ resource.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine aktive IMAP-Verbindung, die z. B. mit imap_open() geöffnet wurde. Ab PHP 8.1 ein IMAP\Connection-Objekt, zuvor ein resource.
$reference Pflicht string Der Basis-Pfad (Referenz) auf dem Server, z. B. {imap.example.com}. Gibt den Startpunkt für die Suche nach Postfächern an.
$pattern Pflicht string Suchmuster für Postfach-Namen. * sucht rekursiv über alle Hierarchie-Ebenen, % nur innerhalb einer Ebene. Zum Auflisten aller Postfächer kann * verwendet werden.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array von Strings zurück, wobei jeder String den vollständig qualifizierten Namen eines Postfachs enthält (z. B. {imap.example.com}INBOX). Bei einem Fehler wird false zurückgegeben.

Beispiele

Alle Postfächer eines IMAP-Kontos auflisten

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

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

$postfaecher = imap_list($imap, '{imap.example.com}', '*');

if ($postfaecher === false) {
    echo 'Keine Postfächer gefunden oder Fehler aufgetreten.';
} else {
    echo 'Gefundene Postfächer:' . PHP_EOL;
    foreach ($postfaecher as $postfach) {
        echo '  ' . $postfach . PHP_EOL;
    }
}

imap_close($imap);
Gefundene Postfächer: {imap.example.com}INBOX {imap.example.com}Sent {imap.example.com}Drafts {imap.example.com}Trash

Nur Unterordner von INBOX mit % auflisten (eine Ebene)

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

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

// Nur direkte Unterordner von INBOX (keine weiteren Unterebenen)
$unterordner = imap_list($imap, '{imap.example.com}', 'INBOX.%');

if ($unterordner !== false) {
    echo 'Direkte Unterordner von INBOX:' . PHP_EOL;
    foreach ($unterordner as $ordner) {
        // Nur den Ordnernamen ohne Server-Präfix anzeigen
        $name = str_replace('{imap.example.com}', '', $ordner);
        echo '  ' . $name . PHP_EOL;
    }
}

imap_close($imap);
Direkte Unterordner von INBOX: INBOX.Arbeit INBOX.Familie INBOX.Newsletter

// Wichtig · Fallstricke

Sicherheitshinweis: Geben Sie Benutzeranmeldedaten oder den Inhalt des Rückgabewerts nicht ungefiltert an den Browser aus, da Postfach-Namen sensible Informationen enthalten können. Verwenden Sie htmlspecialchars(), wenn Postfach-Namen in HTML-Seiten ausgegeben werden sollen.

Das Muster * kann bei sehr großen Postfach-Strukturen zu langen Antwortzeiten führen. In solchen Fällen empfiehlt sich %, um die Suche auf eine Hierarchie-Ebene zu beschränken.

Die Funktion ähnelt imap_getmailboxes(), gibt jedoch nur einfache Strings statt Objekte mit zusätzlichen Attributen (z. B. Trennzeichen, Attribute) zurück. Für detailliertere Informationen sollte imap_getmailboxes() bevorzugt werden.

Ab PHP 8.1 ist die IMAP-Erweiterung nicht mehr standardmäßig enthalten und muss separat über PECL installiert werden (pecl install imap).