Start · Sprachen · PHP · Referenz · imap_getsubscribed

imap_getsubscribed

Funktion

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

seit PHP 4.0.0 Kategorie: http

Signatur

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

Beschreibung

imap_getsubscribed() ruft alle Postfächer ab, die der aktuelle Nutzer auf dem IMAP-Server abonniert hat und die dem angegebenen Referenzpfad sowie Suchmuster entsprechen. Abonnierte Mailboxen sind solche, die der Nutzer explizit mit imap_subscribe() markiert hat, um sie regelmäßig zu verfolgen.

Die Funktion ähnelt imap_getmailboxes(), listet jedoch ausschließlich abonnierte Postfächer auf. Sie gibt ein Array von Objekten zurück, wobei jedes Objekt die Eigenschaften name (vollständiger Name der Mailbox), delimiter (Trennzeichen in der Mailbox-Hierarchie) und attributes (Bit-Flags, z. B. LATT_NOINFERIORS) enthält.

Das $pattern-Argument erlaubt den Einsatz von Wildcards: * passt auf beliebig viele Zeichen (auch Hierarchietrenner), während % nur bis zum nächsten Hierarchietrenner passt. Mit dem Muster * werden alle abonnierten Postfächer unterhalb der Referenz zurückgeliefert.

Diese Funktion eignet sich besonders für E-Mail-Clients und Verwaltungsoberflächen, bei denen Nutzer eine persönliche Auswahl von Postfächern verwalten und nur diese angezeigt bekommen sollen.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine aktive IMAP-Verbindung, die zuvor mit imap_open() geöffnet wurde. Ab PHP 8.1 ist dies ein IMAP\Connection-Objekt (zuvor eine Ressource).
$reference Pflicht string Der Basis-Referenzpfad, von dem aus gesucht wird, z. B. {imap.example.com}. Normalerweise wird hier der Server-String aus imap_open() verwendet.
$pattern Pflicht string Suchmuster für Postfächer. Wildcards: * steht für beliebige Zeichen inklusive Hierarchietrenner, % steht für beliebige Zeichen ohne Hierarchietrenner. Mit * werden alle abonnierten Mailboxen zurückgegeben.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array von Objekten zurück, wobei jedes Objekt die Eigenschaften name (vollständiger Mailbox-Name), delimiter (Hierarchietrenner) und attributes (Bit-Flags) enthält. Gibt false zurück, wenn ein Fehler auftritt oder keine abonnierten Mailboxen gefunden wurden.

Beispiele

Alle abonnierten Postfächer auflisten

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

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

$subscribed = imap_getsubscribed($imap, '{imap.example.com}', '*');

if ($subscribed === false || empty($subscribed)) {
    echo 'Keine abonnierten Postfächer gefunden.' . PHP_EOL;
} else {
    echo 'Abonnierte Postfächer:' . PHP_EOL;
    foreach ($subscribed as $mailbox) {
        echo ' - ' . $mailbox->name . PHP_EOL;
    }
}

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

Nur abonnierte Unterordner eines bestimmten Ordners anzeigen

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

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

// Nur direkte Unterordner von 'Projekte' (kein tieferes Nesting durch %)
$subscribed = imap_getsubscribed($imap, '{imap.example.com}', 'Projekte/%');

if (!empty($subscribed)) {
    foreach ($subscribed as $mailbox) {
        // Attribute prüfen: LATT_NOINFERIORS bedeutet, keine Unterordner möglich
        $noChildren = ($mailbox->attributes & LATT_NOINFERIORS) ? 'Ja' : 'Nein';
        printf("Mailbox: %-40s | Keine Unterordner: %s\n", $mailbox->name, $noChildren);
    }
} else {
    echo 'Keine passenden abonnierten Postfächer gefunden.' . PHP_EOL;
}

imap_close($imap);
Mailbox: {imap.example.com}Projekte/PHP | Keine Unterordner: Nein Mailbox: {imap.example.com}Projekte/Python | Keine Unterordner: Ja

// Wichtig · Fallstricke

IMAP-Erweiterung erforderlich: Die Funktion ist nur verfügbar, wenn PHP mit der IMAP-Erweiterung (--with-imap) kompiliert wurde. Viele moderne Hosting-Umgebungen binden diese optional ein.

Änderung in PHP 8.1: Der erste Parameter ist nun vom Typ IMAP\Connection und kein resource mehr. Älterer Code, der den Rückgabewert von imap_open() als Ressource behandelt, muss ggf. angepasst werden.

Unterschied zu imap_getmailboxes(): imap_getsubscribed() liefert nur explizit abonnierte Postfächer, während imap_getmailboxes() alle vorhandenen Postfächer zurückgibt. Das Abonnement wird serverseitig gespeichert und ist nutzerspezifisch.

Sicherheit: Benutzereingaben, die in $reference oder $pattern einfließen, sollten sorgfältig validiert und bereinigt werden, um IMAP-Injection-Angriffe zu verhindern.