Start · Sprachen · PHP · Referenz · imap_listscan

imap_listscan

Funktion

Gibt eine Liste von Postfächern zurück, deren Namen dem angegebenen Muster entsprechen und die den gesuchten Text enthalten.

seit PHP 4.0.0 Kategorie: http

Signatur

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

Beschreibung

imap_listscan durchsucht den IMAP-Server nach Postfächern (Mailboxen), die sowohl dem $pattern (Muster) entsprechen als auch den angegebenen $content-String im Namen enthalten. Die Funktion ist damit eine Kombination aus Mustererkennung und Textsuche und eignet sich besonders, wenn aus einer großen Anzahl von Ordnern gezielt passende Postfächer herausgefiltert werden sollen.

Der Parameter $reference gibt den Ausgangspfad (oft den Servernamen) an, von dem aus gesucht wird. Das $pattern unterstützt Wildcards: * steht für beliebig viele Zeichen (auch über Hierarchieebenen hinweg), % entspricht beliebig vielen Zeichen innerhalb einer Ebene.

Die Funktion gibt ein Array mit den vollständigen Namen der gefundenen Postfächer zurück – oder false bei einem Fehler. Im Erfolgsfall, aber ohne Treffer, wird ein leeres Array zurückgegeben.

Diese Funktion ist sinnvoll in Szenarien, in denen dynamisch nach bestimmten Projektordnern, Kundenpostfächern oder thematischen Unterordnern gesucht werden muss, ohne alle Postfächer manuell zu durchsuchen.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine aktive IMAP-Verbindungsinstanz, wie sie von imap_open() zurückgegeben wird.
$reference Pflicht string Der Ausgangspfad für die Suche, üblicherweise der Servername in geschweiften Klammern, z. B. {imap.example.com}.
$pattern Pflicht string Das Suchmuster mit optionalen Wildcards: * für beliebig viele Zeichen über alle Hierarchieebenen, % für beliebig viele Zeichen innerhalb einer Ebene.
$content Pflicht string Ein Teilstring, der im Namen der Postfächer enthalten sein muss. Nur Postfächer, die diesen Text im Namen tragen, werden zurückgegeben.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array mit den vollständigen Postfachnamen zurück, die sowohl dem Muster als auch dem Inhaltsfilter entsprechen. Bei einem Fehler wird false zurückgegeben. Werden keine passenden Postfächer gefunden, ist das Array leer.

Beispiele

Alle Postfächer suchen, die 'Projekt' im Namen enthalten

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

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

// Alle Postfächer der obersten Ebene durchsuchen, die 'Projekt' enthalten
$postfaecher = imap_listscan($imap, '{imap.example.com}', '%', 'Projekt');

if ($postfaecher === false) {
    echo 'Fehler bei der Suche.';
} elseif (empty($postfaecher)) {
    echo 'Keine passenden Postfächer gefunden.';
} else {
    echo 'Gefundene Postfächer:' . PHP_EOL;
    foreach ($postfaecher as $postfach) {
        echo '  ' . $postfach . PHP_EOL;
    }
}

imap_close($imap);
Gefundene Postfächer: {imap.example.com}Projekt-Alpha {imap.example.com}Projekt-Beta

Rekursive Suche in allen Unterordnern nach einem Stichwort

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

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

// Alle Postfächer inkl. Unterordner durchsuchen, die 'Archiv' im Namen haben
$treffer = imap_listscan($imap, '{imap.example.com}', '*', 'Archiv');

if (!empty($treffer)) {
    echo count($treffer) . ' Archiv-Postfach/Archiv-Postfächer gefunden:' . PHP_EOL;
    foreach ($treffer as $t) {
        echo '  - ' . $t . PHP_EOL;
    }
} else {
    echo 'Kein Archiv-Postfach gefunden.';
}

imap_close($imap);
2 Archiv-Postfächer gefunden: {imap.example.com}INBOX.Archiv {imap.example.com}INBOX.Kunden.Archiv

// Wichtig · Fallstricke

Deprecation-Hinweis: Ab PHP 8.1.0 wurde der Ressourcentyp für IMAP-Verbindungen durch die Klasse IMAP\Connection ersetzt. In älteren PHP-Versionen (bis 8.0) war der Parameter vom Typ resource.

Serverkompatiblität: Die Verfügbarkeit und das Verhalten dieser Funktion hängen stark vom jeweiligen IMAP-Server ab. Nicht alle Server unterstützen die kombinierte Suche nach Muster und Inhalt gleichermaßen zuverlässig.

Encoding: Postfachnamen können in modifiziertem UTF-7 kodiert sein. Zum Dekodieren kann imap_utf7_decode() verwendet werden.

Alternativen: Für einfache Listenabfragen ohne Inhaltsfilter eignet sich imap_list() besser. Für detailliertere Informationen zu Postfächern sollte imap_getmailboxes() in Betracht gezogen werden.