Start · Sprachen · PHP · Referenz · IMAP\Connection

IMAP\Connection

Klasse

Opake Klasse, die ab PHP 8.1.0 die bisherige <code>imap</code>-Ressource als Verbindungsobjekt zum IMAP-Server ersetzt.

seit PHP 8.1.0 Kategorie: http

Signatur

class IMAP\Connection

Beschreibung

Die Klasse IMAP\Connection repräsentiert eine aktive Verbindung zu einem IMAP-, POP3- oder NNTP-Server und löst den früheren Ressourcentyp imap ab, der bis PHP 8.0 von Funktionen wie imap_open() zurückgegeben wurde. Sie ist vollständig opak, das heißt, ihre interne Struktur ist nicht von außen zugänglich und sie bietet keine öffentlichen Eigenschaften oder Methoden.

Alle IMAP-Erweiterungsfunktionen, die früher eine resource vom Typ imap als Parameter akzeptierten (z. B. imap_fetch_overview(), imap_search(), imap_close()), erwarten nun ein Objekt vom Typ IMAP\Connection. Der Rückgabewert von imap_open() ist entsprechend von resource|false auf IMAP\Connection|false geändert worden.

Da die Klasse opak ist, kann sie nicht manuell instanziiert werden. Eine Instanz erhält man ausschließlich durch den Rückgabewert von imap_open() oder imap_reopen(). Der Typ lässt sich mit instanceof IMAP\Connection oder get_class() prüfen.

Beim Migrieren von bestehendem Code reicht es in der Regel aus, Typprüfungen von is_resource() auf instanceof IMAP\Connection umzustellen, da die IMAP-Funktionen selbst unverändert bleiben und das neue Objekt transparent akzeptieren.

Beispiele

Verbindung öffnen und Typ prüfen

<?php
// Verbindung zum IMAP-Server herstellen
$connection = imap_open(
    '{imap.example.com:993/imap/ssl}INBOX',
    'benutzer@example.com',
    'geheimes_passwort'
);

if ($connection instanceof IMAP\Connection) {
    echo "Verbindung erfolgreich hergestellt." . PHP_EOL;

    // Anzahl der Nachrichten im Postfach abrufen
    $anzahl = imap_num_msg($connection);
    echo "Nachrichten im Postfach: " . $anzahl . PHP_EOL;

    // Verbindung sauber schließen
    imap_close($connection);
} else {
    echo "Verbindung fehlgeschlagen: " . imap_last_error() . PHP_EOL;
}
Verbindung erfolgreich hergestellt. Nachrichten im Postfach: 42

Migration von is_resource() auf instanceof

<?php
// PHP 8.0 und älter (veraltet):
// $connection = imap_open(...);
// if (is_resource($connection)) { ... }

// Ab PHP 8.1 – korrekte Prüfung:
$connection = imap_open(
    '{imap.example.com:993/imap/ssl}INBOX',
    'benutzer@example.com',
    'geheimes_passwort'
);

if (!($connection instanceof IMAP\Connection)) {
    throw new RuntimeException('IMAP-Verbindung konnte nicht geöffnet werden.');
}

// Ungelesene Nachrichten suchen
$ungelesen = imap_search($connection, 'UNSEEN');
if ($ungelesen !== false) {
    echo "Ungelesene Nachrichten: " . count($ungelesen) . PHP_EOL;
    foreach ($ungelesen as $msgNr) {
        $header = imap_headerinfo($connection, $msgNr);
        echo ' - ' . $header->subject . PHP_EOL;
    }
}

imap_close($connection);
Ungelesene Nachrichten: 2 - Willkommen! - Ihr Konto wurde aktiviert.

// Wichtig · Fallstricke

Rückwärtskompatibilität: Code, der is_resource() zur Prüfung einer IMAP-Verbindung verwendet, liefert ab PHP 8.1 false, da IMAP\Connection ein Objekt ist. Entsprechende Prüfungen müssen auf instanceof IMAP\Connection umgestellt werden.

Manuelle Instanziierung nicht möglich: Es gibt keinen öffentlichen Konstruktor. Der Versuch, new IMAP\Connection() aufzurufen, führt zu einem Fehler. Instanzen werden ausschließlich von imap_open() erzeugt.

Erweiterung erforderlich: Die IMAP-Erweiterung ist nicht in jeder PHP-Distribution standardmäßig aktiviert. Sie muss mit --with-imap kompiliert oder als Modul geladen werden.