Start · Sprachen · PHP · Referenz · imap_ping

imap_ping

Funktion

Prüft, ob eine IMAP-Verbindung noch aktiv ist, und verarbeitet dabei ausstehende Benachrichtigungen vom Server.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_ping(IMAP\Connection $imap): bool

Beschreibung

imap_ping() sendet einen PING-Befehl über die angegebene IMAP-Verbindung und prüft so, ob die Verbindung zum Mailserver noch gültig und aktiv ist. Gleichzeitig werden ausstehende Nachrichten und Benachrichtigungen des Servers abgerufen und verarbeitet, z. B. neue eingetroffene E-Mails.

Die Funktion eignet sich besonders für lang laufende Skripte oder Daemons, die eine persistente IMAP-Verbindung aufrechterhalten und regelmäßig prüfen müssen, ob der Server die Verbindung noch akzeptiert. Wenn imap_ping() false zurückgibt, muss die Verbindung neu aufgebaut werden.

Ein typischer Anwendungsfall ist das Polling einer Mailbox: Statt die Verbindung bei jedem Prüfzyklus zu schließen und neu aufzubauen, kann man mit imap_ping() kostengünstig prüfen, ob die bestehende Verbindung noch nutzbar ist, und gleichzeitig neue Nachrichten signalisiert bekommen.

Hinweis: Die Funktion gehört zur IMAP-Erweiterung und setzt eine zuvor mit imap_open() geöffnete Verbindung voraus. Ab PHP 8.1 wird das Verbindungs-Handle als Objekt vom Typ IMAP\Connection übergeben.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine aktive IMAP-Verbindungsressource, wie sie von imap_open() zurückgegeben wird. Ab PHP 8.1 ist der Typ IMAP\Connection.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Verbindung noch aktiv und funktionsfähig ist, andernfalls false.

Beispiele

Verbindung prüfen und bei Bedarf neu aufbauen

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

if (!$imap) {
    die('Verbindung konnte nicht geöffnet werden: ' . imap_last_error());
}

// Simuliere einen langen Prozess mit mehreren Iterationen
for ($i = 0; $i < 5; $i++) {
    sleep(2); // Wartezeit simulieren

    if (!imap_ping($imap)) {
        echo "Verbindung unterbrochen – verbinde neu...\n";
        imap_close($imap);
        $imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheim');
        if (!$imap) {
            die('Neuverbindung fehlgeschlagen.');
        }
        echo "Neu verbunden.\n";
    } else {
        echo "Verbindung aktiv (Iteration $i).\n";
    }
}

imap_close($imap);
Verbindung aktiv (Iteration 0). Verbindung aktiv (Iteration 1). Verbindung aktiv (Iteration 2). Verbindung aktiv (Iteration 3). Verbindung aktiv (Iteration 4).

Neue Nachrichten nach Ping erkennen

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

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

$vorherAnzahl = imap_num_msg($imap);
echo "Nachrichten vor Ping: $vorherAnzahl\n";

// Ping verarbeitet serverseitige Benachrichtigungen und aktualisiert den Status
if (imap_ping($imap)) {
    $nachherAnzahl = imap_num_msg($imap);
    echo "Nachrichten nach Ping: $nachherAnzahl\n";

    if ($nachherAnzahl > $vorherAnzahl) {
        echo ($nachherAnzahl - $vorherAnzahl) . ' neue Nachricht(en) eingegangen!\n';
    } else {
        echo "Keine neuen Nachrichten.\n";
    }
} else {
    echo "Verbindung ist nicht mehr aktiv.\n";
}

imap_close($imap);
Nachrichten vor Ping: 12 Nachrichten nach Ping: 14 2 neue Nachricht(en) eingegangen!

// Wichtig · Fallstricke

Deprecation/Entfernung: Die IMAP-Erweiterung wurde mit PHP 8.4 als deprecated markiert und soll in einer zukünftigen PHP-Version entfernt werden. Für neue Projekte empfiehlt sich der Einsatz einer modernen Bibliothek wie ddeboer/imap oder Webklex/php-imap.

Ressourcenverbrauch: In lang laufenden Skripten sollte imap_ping() nicht zu häufig aufgerufen werden, da jeder Aufruf eine Netzwerkanfrage an den Server sendet.

Fehlerbehandlung: Wenn die Verbindung durch ein Timeout oder einen Netzwerkfehler unterbrochen wurde, gibt die Funktion false zurück. Mit imap_last_error() lässt sich der genaue Fehlergrund ermitteln.