Start · Sprachen · PHP · Referenz · imap_undelete

imap_undelete

Funktion

Entfernt die Löschmarkierung (<code>\Deleted</code>) von einer oder mehreren IMAP-Nachrichten, sodass diese beim nächsten <code>imap_expunge()</code> nicht gelöscht werden.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_undelete(IMAP\Connection $imap, string $message_nums, int $flags = 0): bool

Beschreibung

imap_undelete() hebt die zuvor mit imap_delete() oder anderen Mitteln gesetzte Löschmarkierung (\Deleted) einer oder mehrerer Nachrichten in einem IMAP-Postfach wieder auf. Nachrichten, die mit \Deleted markiert sind, werden erst dann endgültig entfernt, wenn imap_expunge() aufgerufen oder die Verbindung geschlossen wird. Solange keine imap_expunge()-Operation ausgeführt wurde, kann die Markierung mit dieser Funktion rückgängig gemacht werden.

Die Funktion eignet sich besonders in Szenarien, in denen dem Benutzer eine Rückgängig-Funktion angeboten werden soll, bevor Nachrichten dauerhaft vernichtet werden. Sie ist ein wichtiges Sicherheitsnetz in E-Mail-Anwendungen, die auf dem IMAP-Protokoll basieren.

Der Parameter message_nums akzeptiert eine kommagetrennte Liste von Nachrichtennummern oder -bereichen (z. B. 1,2,3 oder 1:5), was eine effiziente Stapelverarbeitung mehrerer Nachrichten in einem einzigen Aufruf ermöglicht.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine gültige IMAP-Verbindungsressource, die zuvor mit imap_open() geöffnet wurde.
$message_nums Pflicht string Eine kommagetrennte Liste von Nachrichtennummern oder -bereichen (z. B. '1', '1,3,5' oder '1:10'), deren Löschmarkierung entfernt werden soll.
$flags int 0 Optionaler Bitmask-Parameter. Aktuell wird nur FT_UID unterstützt, das bewirkt, dass message_nums als UIDs statt als Sequenznummern interpretiert werden.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Verbindung oder Nachrichtennummer).

Beispiele

Löschmarkierung einer einzelnen Nachricht rückgängig machen

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

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

// Nachricht Nr. 5 zur Löschung markieren
imap_delete($imap, '5');
echo "Nachricht 5 zum Löschen markiert.\n";

// Löschmarkierung wieder aufheben (Undo)
$result = imap_undelete($imap, '5');
if ($result) {
    echo "Löschmarkierung von Nachricht 5 erfolgreich entfernt.\n";
} else {
    echo "Fehler beim Entfernen der Löschmarkierung.\n";
}

imap_close($imap);
Nachricht 5 zum Löschen markiert. Löschmarkierung von Nachricht 5 erfolgreich entfernt.

Löschmarkierungen mehrerer Nachrichten per UID aufheben

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

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

// Mehrere Nachrichten anhand ihrer UIDs als gelöscht markieren
$uids = '1001,1002,1003';
imap_delete($imap, $uids, FT_UID);
echo "Nachrichten {$uids} zur Löschung markiert.\n";

// Alle drei Markierungen mit einem Aufruf zurücknehmen
$result = imap_undelete($imap, $uids, FT_UID);
if ($result) {
    echo "Löschmarkierungen für UIDs {$uids} erfolgreich aufgehoben.\n";
} else {
    echo "Fehler: " . imap_last_error() . "\n";
}

// Kein imap_expunge() → Nachrichten bleiben erhalten
imap_close($imap);
Nachrichten 1001,1002,1003 zur Löschung markiert. Löschmarkierungen für UIDs 1001,1002,1003 erfolgreich aufgehoben.

// Wichtig · Fallstricke

Wichtig: imap_undelete() wirkt nur, solange imap_expunge() noch nicht aufgerufen wurde und die IMAP-Verbindung noch geöffnet ist. Nach einem imap_expunge() sind die Nachrichten unwiederbringlich gelöscht.

Ab PHP 8.1 ist der erste Parameter vom Typ IMAP\Connection (Klasse) statt der zuvor verwendeten resource. Älterer Code, der auf is_resource() prüft, muss entsprechend angepasst werden.

Die IMAP-Erweiterung ist standardmäßig nicht in allen PHP-Installationen aktiviert und muss ggf. mit dem --with-imap-Flag kompiliert oder als Shared Extension geladen werden.