Signatur
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
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);
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);
// 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.