Start · Sprachen · PHP · Referenz · imap_last_error

imap_last_error

Funktion

Gibt den zuletzt aufgetretenen IMAP-Fehlermeldungstext zurück oder <code>false</code>, wenn kein Fehler vorliegt.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_last_error(): string|false

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

Typ
string|false
Beschreibung
Gibt den letzten IMAP-Fehlermeldungstext als 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);
}
Verbindung fehlgeschlagen: Can not authenticate to IMAP server: [AUTHENTICATIONFAILED] Authentication failed.

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.