Start · Sprachen · PHP · Referenz · imap_expunge

imap_expunge

Funktion

Löscht alle zum Löschen markierten Nachrichten dauerhaft aus dem aktuell geöffneten IMAP-Postfach.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_expunge(IMAP\Connection $imap): bool

Beschreibung

imap_expunge() führt das endgültige Löschen aller Nachrichten durch, die zuvor mit dem Flag \Deleted markiert wurden. Im IMAP-Protokoll bedeutet das Setzen des \Deleted-Flags lediglich eine Markierung – die Nachricht verbleibt physisch im Postfach, bis imap_expunge() aufgerufen wird.

Typischerweise werden Nachrichten zunächst mit imap_delete() oder imap_mail_move() zum Löschen markiert. Erst nach dem expliziten Aufruf von imap_expunge() werden sie tatsächlich entfernt. Wird die Verbindung mit imap_close() und dem Flag CL_EXPUNGE geschlossen, geschieht dies automatisch – ein manueller Aufruf ist dann nicht erforderlich.

Diese Funktion ist besonders wichtig beim Verwalten von IMAP-Postfächern in Anwendungen, die E-Mails verarbeiten und bereinigen, etwa in E-Mail-Clients, Spam-Filtern oder automatisierten Postfach-Verwaltungsskripten.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine aktive IMAP-Verbindungsressource, die zuvor mit imap_open() geöffnet wurde.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Operation erfolgreich war, andernfalls false.

Beispiele

E-Mail löschen und expunge ausführen

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

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

// Nachricht mit der UID 5 zum Löschen markieren
imap_delete($imap, 5);

// Alle markierten Nachrichten dauerhaft entfernen
if (imap_expunge($imap)) {
    echo 'Nachrichten erfolgreich gelöscht.';
} else {
    echo 'Fehler beim Löschen: ' . imap_last_error();
}

imap_close($imap);
Nachrichten erfolgreich gelöscht.

Alternativ: Automatisches Expunge beim Schließen der Verbindung

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

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

// Mehrere Nachrichten markieren
imap_delete($imap, 1);
imap_delete($imap, 3);
imap_delete($imap, 7);

// CL_EXPUNGE bewirkt automatisches Expunge beim Schließen
imap_close($imap, CL_EXPUNGE);

echo 'Verbindung geschlossen, markierte Nachrichten wurden gelöscht.';
Verbindung geschlossen, markierte Nachrichten wurden gelöscht.

// Wichtig · Fallstricke

Unwiderruflich: Das Löschen per imap_expunge() ist endgültig. Es gibt keine Möglichkeit, die Nachrichten danach wiederherzustellen, sofern kein serverseitiges Backup existiert. Vor dem Aufruf sollte sichergestellt sein, dass wirklich alle markierten Nachrichten gelöscht werden dürfen.

Ab PHP 8.1.0 erwartet der Parameter $imap eine Instanz der Klasse IMAP\Connection statt einer resource (wie in früheren PHP-Versionen). Der Code muss entsprechend angepasst werden, falls eine Migration von PHP < 8.1 erfolgt.

Die IMAP-Erweiterung muss bei der PHP-Kompilierung mit --with-imap aktiviert worden sein, da sie nicht standardmäßig aktiviert ist.