Start · Sprachen · PHP · Referenz · imap_get_quotaroot

imap_get_quotaroot

Funktion

Liefert die Quota-Einstellungen (Speicherlimit und aktuelle Nutzung) für ein bestimmtes Benutzerpostfach via IMAP.

seit PHP 4.3.0 Kategorie: http

Signatur

imap_get_quotaroot(IMAP\Connection $imap, string $mailbox): array|false

Beschreibung

imap_get_quotaroot() ruft die Quota-Informationen für ein angegebenes IMAP-Postfach ab. Im Gegensatz zu imap_get_quota(), das den Quota-Root direkt als Parameter erwartet, ermittelt diese Funktion selbst den zugehörigen Quota-Root aus dem Postfachnamen und gibt alle damit verbundenen Quota-Informationen zurück.

Die Funktion gibt ein assoziatives Array zurück, das für jeden Quota-Root einen Eintrag enthält. Jeder Eintrag beinhaltet den Namen der Ressource (STORAGE), den aktuell belegten Speicherplatz (usage) sowie das definierte Limit (limit), jeweils in Kilobyte (KB).

Diese Funktion ist besonders nützlich für Webmail-Applikationen oder Administrationsoberflächen, die Benutzern oder Administratoren den aktuellen Speicherverbrauch und das Speicherlimit eines Postfachs anzeigen sollen. Sie erfordert, dass der IMAP-Server die IMAP4 QUOTA-Erweiterung (RFC 2087) unterstützt.

Zu beachten ist, dass die Funktion nur dann korrekte Ergebnisse liefert, wenn die IMAP-Verbindung mit ausreichenden Berechtigungen aufgebaut wurde – in der Regel als Administrator oder als der Eigentümer des Postfachs.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine aktive IMAP-Verbindungsinstanz, die zuvor mit imap_open() erzeugt wurde. Ab PHP 8.1 ist dies ein IMAP\Connection-Objekt (zuvor eine Ressource).
$mailbox Pflicht string Der vollständige IMAP-Postfachname im Format {server}postfachname, z. B. {imap.example.com}INBOX. Der Serverpräfix ist zwingend erforderlich.

Rückgabewert

Typ
array|false
Beschreibung
Gibt bei Erfolg ein mehrdimensionales assoziatives Array zurück. Jeder Schlüssel entspricht dem Namen eines Quota-Roots. Jeder Eintrag enthält wiederum Ressourcen-Einträge (z. B. STORAGE) mit den Schlüsseln usage (aktuell genutzter Speicher in KB) und limit (maximaler Speicher in KB). Im Fehlerfall wird false zurückgegeben.

Beispiele

Quota-Nutzung für INBOX abrufen und anzeigen

<?php
$imap = imap_open('{imap.example.com:143}INBOX', 'benutzer@example.com', 'geheimespasswort');

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

$quotaRoot = imap_get_quotaroot($imap, 'INBOX');

if ($quotaRoot === false) {
    echo 'Quota-Informationen konnten nicht abgerufen werden.' . PHP_EOL;
} else {
    foreach ($quotaRoot as $root => $resources) {
        echo "Quota-Root: " . $root . PHP_EOL;
        foreach ($resources as $resourceName => $info) {
            if (isset($info['usage'], $info['limit'])) {
                $usagePercent = round(($info['usage'] / $info['limit']) * 100, 2);
                echo "  Ressource: " . $resourceName . PHP_EOL;
                echo "  Genutzt:   " . $info['usage'] . " KB" . PHP_EOL;
                echo "  Limit:     " . $info['limit'] . " KB" . PHP_EOL;
                echo "  Auslastung: " . $usagePercent . "%" . PHP_EOL;
            }
        }
    }
}

imap_close($imap);
Quota-Root: user/benutzer Ressource: STORAGE Genutzt: 51200 KB Limit: 102400 KB Auslastung: 50%

Quota-Warnung bei hoher Auslastung ausgeben

<?php
$imap = imap_open('{imap.example.com:143}INBOX', 'benutzer@example.com', 'geheimespasswort');

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

$quotaInfo = imap_get_quotaroot($imap, 'INBOX');

if (is_array($quotaInfo)) {
    foreach ($quotaInfo as $root => $resources) {
        if (isset($resources['STORAGE'])) {
            $usage = $resources['STORAGE']['usage'];
            $limit = $resources['STORAGE']['limit'];
            $percent = ($limit > 0) ? ($usage / $limit) * 100 : 0;

            if ($percent >= 90) {
                echo "WARNUNG: Ihr Postfach ist zu " . round($percent, 1) . "% voll!\n";
                echo "Bitte löschen Sie alte E-Mails, um Platz freizugeben.\n";
            } else {
                echo "Postfach-Auslastung: " . round($percent, 1) . "% – alles in Ordnung.\n";
            }
        }
    }
}

imap_close($imap);
Postfach-Auslastung: 50% – alles in Ordnung.

// Wichtig · Fallstricke

Serverunterstützung erforderlich: Der IMAP-Server muss die QUOTA-Erweiterung gemäß RFC 2087 unterstützen. Nicht alle IMAP-Server (z. B. ältere Exchange-Versionen) unterstützen diese Erweiterung. Bei fehlender Unterstützung gibt die Funktion false zurück.

Berechtigungen: Um die Quota-Informationen anderer Benutzer abzurufen, sind administrative IMAP-Berechtigungen notwendig. Ein normaler Benutzer kann in der Regel nur seine eigene Quota abfragen.

Einheit: Alle Werte (usage und limit) werden in Kilobyte (KB) angegeben, nicht in Bytes.

PHP 8.1: Ab PHP 8.1 wurde der Typ des $imap-Parameters von einer Ressource (resource) auf eine Instanz der Klasse IMAP\Connection geändert. Code, der eine Ressource erwartet, muss entsprechend angepasst werden.

IMAP-Erweiterung: Die IMAP-Funktionen erfordern, dass PHP mit der --with-imap-Option kompiliert wurde oder die php_imap-Extension geladen ist.