Start · Sprachen · PHP · Referenz · imap_deletemailbox

imap_deletemailbox

Funktion

Löscht ein bestehendes IMAP-Postfach (Ordner) dauerhaft vom Server.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_deletemailbox(IMAP\Connection $imap, string $mailbox): bool

Beschreibung

imap_deletemailbox() entfernt ein Postfach (einen E-Mail-Ordner) vollständig vom IMAP-Server. Die Operation ist nicht umkehrbar – alle enthaltenen Nachrichten gehen unwiederbringlich verloren. Die Funktion entspricht dem IMAP-Befehl DELETE.

Der Postfachname muss exakt in der Notation angegeben werden, die der IMAP-Server erwartet. Bei lokalen Mailboxen ist dies häufig {server}INBOX.Ordnername, bei anderen Servern kann die Schreibweise abweichen. Der korrekte Name lässt sich vorab mit imap_list() ermitteln.

Die Funktion ist sinnvoll, wenn Benutzer in einer Webanwendung eigene Ordnerstrukturen verwalten und Ordner löschen dürfen sollen. Vor dem Löschen sollte geprüft werden, ob der Ordner existiert und ob ggf. Unterordner vorhanden sind – viele Server erlauben das Löschen eines Elternordners erst nach dem Entfernen aller Unterordner.

Hinweis: Ab PHP 8.1 ist die IMAP-Erweiterung als veraltet markiert und wird möglicherweise in zukünftigen Versionen entfernt. Für neue Projekte wird empfohlen, auf externe Bibliotheken wie Horde_Imap_Client oder php-imap umzustellen.

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 Name des zu löschenden Postfachs in der IMAP-Notation, z. B. {imap.example.com}INBOX.Archiv. Der Name muss exakt so angegeben werden, wie ihn der Server erwartet.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn das Postfach erfolgreich gelöscht wurde. Gibt false zurück, wenn das Löschen fehlgeschlagen ist, z. B. weil das Postfach nicht existiert, noch Unterordner enthält oder der Benutzer keine Berechtigung hat.

Beispiele

Einen IMAP-Ordner löschen

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

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

$mailboxToDelete = '{imap.example.com:143}INBOX.AlterOrdner';

if (imap_deletemailbox($imap, $mailboxToDelete)) {
    echo 'Postfach wurde erfolgreich gelöscht.';
} else {
    echo 'Fehler beim Löschen: ' . imap_last_error();
}

imap_close($imap);
Postfach wurde erfolgreich gelöscht.

Vorhandensein prüfen und dann löschen

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

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

$ordnerName = 'INBOX.Temporaer';
$vollständigerName = $server . $ordnerName;

// Prüfen, ob der Ordner existiert
$liste = imap_list($imap, $server, $ordnerName);

if (is_array($liste) && count($liste) > 0) {
    if (imap_deletemailbox($imap, $vollständigerName)) {
        echo "Ordner '{$ordnerName}' wurde gelöscht.";
    } else {
        echo 'Löschen fehlgeschlagen: ' . imap_last_error();
    }
} else {
    echo "Ordner '{$ordnerName}' existiert nicht.";
}

imap_close($imap);
Ordner 'INBOX.Temporaer' wurde gelöscht.

// Wichtig · Fallstricke

Sicherheitshinweis: Der Postfachname sollte niemals direkt aus Benutzereingaben übernommen werden, ohne diese sorgfältig zu validieren. Andernfalls könnten Angreifer durch manipulierte Ordnernamen unbeabsichtigt andere Postfächer löschen (Path-Traversal-ähnliches Risiko). Whitelisting erlaubter Ordnernamen ist die sicherste Strategie.

Deprecation: Die gesamte IMAP-Erweiterung (ext/imap) ist seit PHP 8.4 offiziell als deprecated eingestuft. Für neue Projekte sollten alternative Bibliotheken verwendet werden.

Auf manchen IMAP-Servern (z. B. Dovecot) können nur leere Ordner gelöscht werden. Ordner mit Nachrichten müssen zuerst geleert werden. Das Löschen von INBOX selbst ist auf den meisten Servern nicht möglich und wird mit einem Fehler quittiert.