Signatur
Beschreibung
imap_last_error() liefert die letzte Fehlermeldung, die von der IMAP-C-Bibliothek (c-client) während der aktuellen Seitenanforderung erzeugt wurde. Diese Funktion ist nützlich, um nach fehlgeschlagenen IMAP-Operationen eine aussagekräftige Diagnosemeldung zu erhalten, ohne alle gesammelten Fehler und Warnungen der gesamten IMAP-Sitzung durchsuchen zu müssen.
Intern pflegt PHP eine Liste aller IMAP-Fehler und -Warnungen, die seit dem Start der Anforderung aufgetreten sind. imap_last_error() gibt davon nur den letzten Eintrag zurück. Wenn alle Einträge interessieren, sollte stattdessen imap_errors() verwendet werden, das ein Array sämtlicher aufgetretener Fehler zurückgibt.
Typischer Einsatz ist die Fehlerbehandlung direkt nach Operationen wie imap_open(), imap_mail_move() oder imap_delete(), wenn diese false zurückliefern. So lässt sich dem Benutzer oder dem Logging-System eine sinnvolle Fehlerbeschreibung mitgeben.
Hinweis: Die IMAP-Erweiterung ist in neueren PHP-Versionen nicht mehr standardmäßig gebündelt und muss separat installiert werden (z. B. über das PECL-Paket imap). Ab PHP 8.4 ist die Erweiterung als veraltet markiert (deprecated).
Rückgabewert
string zurück. Wenn seit dem Start der Anforderung kein IMAP-Fehler aufgetreten ist, wird false zurückgegeben.Beispiele
Fehlermeldung nach fehlgeschlagenem imap_open() ausgeben
<?php
$hostname = '{imap.example.com:993/imap/ssl}INBOX';
$username = 'benutzer@example.com';
$password = 'falschesPasswort';
$mailbox = @imap_open($hostname, $username, $password);
if ($mailbox === false) {
$fehler = imap_last_error();
echo 'Verbindung fehlgeschlagen: ' . htmlspecialchars($fehler);
} else {
echo 'Verbindung erfolgreich hergestellt.';
imap_close($mailbox);
}
Letzten Fehler nach einer Nachrichtenoperation protokollieren
<?php
$hostname = '{imap.example.com:993/imap/ssl}INBOX';
$mailbox = @imap_open($hostname, 'benutzer@example.com', 'geheimesPasswort');
if ($mailbox === false) {
error_log('IMAP-Öffnung fehlgeschlagen: ' . imap_last_error());
exit(1);
}
// Versuche, eine Nachricht zu löschen
$msgNr = 1;
$ergebnis = imap_delete($mailbox, $msgNr);
if ($ergebnis === false) {
$fehler = imap_last_error();
error_log('Löschen von Nachricht #' . $msgNr . ' fehlgeschlagen: ' . $fehler);
} else {
imap_expunge($mailbox);
echo 'Nachricht erfolgreich gelöscht.';
}
imap_close($mailbox);
// Wichtig · Fallstricke
Deprecation ab PHP 8.4: Die gesamte IMAP-Erweiterung (und damit auch imap_last_error()) wurde in PHP 8.4 als veraltet markiert. Für neue Projekte sollten moderne Alternativen wie ddeboer/imap oder direkte Implementierungen über Sockets und openssl in Betracht gezogen werden.
Fehler vs. Warnungen: imap_last_error() gibt nur Fehler zurück, keine reinen Warnungen. Für Warnungen steht imap_alerts() zur Verfügung. Wenn sowohl Fehler als auch deren vollständige Liste benötigt werden, empfiehlt sich imap_errors(), das zusätzlich die interne Fehlerliste leert.
Fehlerausgabe unterdrücken: Da IMAP-Funktionen bei Problemen häufig PHP-Warnungen ausgeben, empfiehlt es sich, Aufrufe mit dem @-Operator zu unterdrücken und stattdessen imap_last_error() für die eigene Fehlerbehandlung zu nutzen.