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