Signatur
Beschreibung
imap_get_quota() ruft die Quota-Informationen eines IMAP-Postfachs ab. Die Funktion setzt einen IMAP-Server voraus, der das IMAP QUOTA-Extension-Protokoll (RFC 2087) unterstützt. Damit lässt sich ermitteln, wie viel Speicherplatz einem Postfach zugewiesen wurde und wie viel davon bereits belegt ist.
Der Rückgabewert ist ein assoziatives Array, dessen Schlüssel die Ressourcentypen repräsentieren (in der Regel STORAGE für den Speicherplatz). Jeder Eintrag enthält die Unter-Schlüssel usage (aktuell belegte Speichereinheiten) und limit (maximales Kontingent), wobei die Einheiten in Kilobytes (KB) angegeben werden.
Diese Funktion ist besonders nützlich für Webmailer-Anwendungen oder Verwaltungsoberflächen, die dem Benutzer anzeigen sollen, wie voll sein Postfach ist, oder die automatisch warnen sollen, wenn ein bestimmter Füllstand überschritten wird.
Hinweis: Diese Funktion kann nur verwendet werden, wenn PHP mit der IMAP-Erweiterung kompiliert wurde (--with-imap) und der IMAP-Server die QUOTA-Erweiterung unterstützt. Andernfalls gibt sie false zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $imap Pflicht | IMAP\Connection | Eine gültige IMAP-Verbindungsinstanz, die zuvor mit imap_open() geöffnet wurde. |
|
| $quota_root Pflicht | string | Der Quota-Wurzelname des Postfachs. In der Regel user.benutzername oder einfach INBOX, abhängig vom verwendeten IMAP-Server. |
Rückgabewert
STORAGE enthält ein weiteres Array mit den Schlüsseln usage (aktuell belegter Speicher in KB) und limit (maximales Kontingent in KB). Weitere Ressourcentypen wie MESSAGE sind möglich, wenn der Server sie meldet. Gibt false zurück, wenn ein Fehler auftritt oder der Server die QUOTA-Erweiterung nicht unterstützt.Beispiele
Quota eines Postfachs auslesen und Auslastung berechnen
<?php
$imap = imap_open('{mail.example.com:143/imap}INBOX', 'benutzer@example.com', 'passwort');
if ($imap === false) {
die('Verbindung fehlgeschlagen: ' . imap_last_error());
}
$quota = imap_get_quota($imap, 'INBOX');
if ($quota === false) {
echo 'Quota-Informationen konnten nicht abgerufen werden.' . PHP_EOL;
} else {
$usage = $quota['STORAGE']['usage']; // in KB
$limit = $quota['STORAGE']['limit']; // in KB
$prozent = ($limit > 0) ? round(($usage / $limit) * 100, 2) : 0;
echo "Belegter Speicher: {$usage} KB" . PHP_EOL;
echo "Maximales Kontingent: {$limit} KB" . PHP_EOL;
echo "Auslastung: {$prozent}%" . PHP_EOL;
}
imap_close($imap);
Warnung ausgeben bei hoher Postfachauslastung
<?php
$imap = imap_open('{mail.example.com:993/imap/ssl}INBOX', 'benutzer@example.com', 'passwort');
if ($imap === false) {
die('Verbindung fehlgeschlagen.');
}
$quota = imap_get_quota($imap, 'user.benutzer');
if (is_array($quota) && isset($quota['STORAGE'])) {
$usage = $quota['STORAGE']['usage'];
$limit = $quota['STORAGE']['limit'];
$auslastung = ($limit > 0) ? ($usage / $limit) * 100 : 0;
if ($auslastung >= 90) {
echo 'WARNUNG: Ihr Postfach ist zu ' . round($auslastung, 1) . '% voll. Bitte löschen Sie alte E-Mails.' . PHP_EOL;
} elseif ($auslastung >= 75) {
echo 'HINWEIS: Ihr Postfach ist zu ' . round($auslastung, 1) . '% ausgelastet.' . PHP_EOL;
} else {
echo 'Postfach-Auslastung: ' . round($auslastung, 1) . '% — alles in Ordnung.' . PHP_EOL;
}
} else {
echo 'Keine Quota-Daten verfügbar.' . PHP_EOL;
}
imap_close($imap);
// Wichtig · Fallstricke
Serverkompatibilität: Nicht alle IMAP-Server unterstützen die QUOTA-Erweiterung (RFC 2087). Dovecot und Cyrus IMAP unterstützen sie in der Regel, während manche einfachen IMAP-Server sie nicht implementieren. Überprüfen Sie die Serverunterstützung, bevor Sie sich auf diese Funktion verlassen.
Rechte: Normale Benutzer können in der Regel nur die Quota ihres eigenen Postfachs abfragen. Für das Abfragen der Quota anderer Benutzer (z. B. als Administrator) sollte stattdessen imap_get_quotaroot() verwendet werden.
PHP 8.1+: Ab PHP 8.1 wurde der Typ des $imap-Parameters von resource auf IMAP\Connection geändert. Älterer Code, der eine resource-Variable übergibt, muss entsprechend angepasst werden.
Einheiten: Die Werte usage und limit werden in Kilobytes (KB) gemeldet, nicht in Bytes. Für die Anzeige in MB oder GB muss entsprechend umgerechnet werden ($kb / 1024 für MB).