Start · Sprachen · PHP · Referenz · imap_open

imap_open

Funktion

Öffnet einen IMAP-Stream zu einem Postfach und gibt eine Verbindungsressource zurück.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_open(string $mailbox, string $user, string $password, int $flags = 0, int $retries = 0, array $options = []): IMAP\Connection|false

Beschreibung

imap_open() stellt eine Verbindung zu einem E-Mail-Postfach über das IMAP-, POP3- oder NNTP-Protokoll her. Der Rückgabewert ist ein IMAP\Connection-Objekt (ab PHP 8.1) bzw. eine Ressource (PHP < 8.1), das/die anschließend an alle weiteren IMAP-Funktionen übergeben wird.

Der Parameter $mailbox enthält sowohl die Serveradresse als auch das gewünschte Postfach im Format {host:port/flags}Ordnername, z. B. {imap.example.com:993/imap/ssl}INBOX. Über die Flags lassen sich Protokoll (/imap, /pop3, /nntp), Verschlüsselung (/ssl, /tls) und Zertifikatsvalidierung (/novalidate-cert) steuern.

Typische Anwendungsfälle sind das Lesen und Verwalten von E-Mails im Posteingang, das Durchsuchen von Ordnern oder das automatisierte Verarbeiten eingehender Nachrichten in Webanwendungen. Die Funktion ist Bestandteil der IMAP-Erweiterung (ext/imap), die mit der Bibliothek c-client kompiliert wird.

Schlägt die Verbindung fehl, wird false zurückgegeben; Fehlermeldungen können über imap_last_error() oder imap_errors() abgerufen werden.

Parameter

Name Typ Default Beschreibung
$mailbox Pflicht string Vollständige Postfachadresse im Format {host:port/flags}Ordnername, z. B. {imap.example.com:993/imap/ssl}INBOX.
$user Pflicht string Benutzername für die Authentifizierung am Mailserver (meist die vollständige E-Mail-Adresse).
$password Pflicht string Passwort des Benutzers für die Authentifizierung. Sollte niemals hartcodiert im Quellcode stehen.
$flags int 0 Bitmaske aus IMAP-Konstanten wie OP_READONLY (Postfach nur lesend öffnen), OP_ANONYMOUS, OP_HALFOPEN, CL_EXPUNGE (beim Schließen löschen), OP_DEBUG, OP_SHORTCACHE, OP_SILENT, OP_PROTOTYPE, OP_SECURE.
$retries int 0 Anzahl der maximalen Wiederholungsversuche bei einem Verbindungsfehler (0 = kein Wiederholungsversuch).
$options array [] Assoziatives Array mit zusätzlichen Verbindungsparametern, z. B. ['DISABLE_AUTHENTICATOR' => 'PLAIN'] um bestimmte Authentifizierungsmechanismen zu deaktivieren.

Rückgabewert

Typ
IMAP\Connection|false
Beschreibung
Gibt bei Erfolg ein IMAP\Connection-Objekt (PHP ≥ 8.1) bzw. eine IMAP-Ressource (PHP < 8.1) zurück. Bei einem Fehler wird false zurückgegeben.

Beispiele

IMAP-Verbindung zu einem SSL-gesicherten Postfach herstellen

<?php
$mailbox = '{imap.example.com:993/imap/ssl}INBOX';
$user    = 'benutzer@example.com';
$pass    = 'geheimes_passwort';

$imap = imap_open($mailbox, $user, $pass);

if ($imap === false) {
    echo 'Verbindung fehlgeschlagen: ' . imap_last_error();
    exit;
}

$anzahl = imap_num_msg($imap);
echo "Es befinden sich {$anzahl} Nachrichten im Posteingang.\n";

imap_close($imap);
Es befinden sich 42 Nachrichten im Posteingang.

POP3-Verbindung öffnen und erste Nachricht lesen

<?php
$mailbox = '{pop3.example.com:995/pop3/ssl}INBOX';
$user    = 'benutzer@example.com';
$pass    = 'geheimes_passwort';

$imap = imap_open($mailbox, $user, $pass, 0, 2); // bis zu 2 Wiederholungsversuche

if ($imap === false) {
    foreach (imap_errors() as $err) {
        echo 'Fehler: ' . $err . PHP_EOL;
    }
    exit;
}

$header = imap_header($imap, 1);
echo 'Betreff der ersten Nachricht: ' . $header->subject . PHP_EOL;

imap_close($imap, CL_EXPUNGE);
Betreff der ersten Nachricht: Willkommen bei example.com

Bestimmten Ordner öffnen und Unterordner auflisten

<?php
$host    = '{imap.example.com:993/imap/ssl}';
$user    = 'benutzer@example.com';
$pass    = 'geheimes_passwort';

// Öffne den Ordner "Sent" (Gesendet)
$imap = imap_open($host . 'Sent', $user, $pass);

if ($imap === false) {
    die('Verbindung fehlgeschlagen: ' . imap_last_error());
}

// Alle Ordner im Postfach auflisten
$ordner = imap_list($imap, $host, '*');
if (is_array($ordner)) {
    foreach ($ordner as $o) {
        echo imap_utf7_decode($o) . PHP_EOL;
    }
}

imap_close($imap);
{imap.example.com:993/imap/ssl}INBOX {imap.example.com:993/imap/ssl}Sent {imap.example.com:993/imap/ssl}Drafts {imap.example.com:993/imap/ssl}Trash

// Wichtig · Fallstricke

Sicherheit: Speichere Passwörter niemals im Quellcode. Nutze stattdessen Umgebungsvariablen oder einen sicheren Konfigurationsspeicher. Verbindungen sollten immer über SSL/TLS (/ssl oder /tls) verschlüsselt werden.

Zertifikatsvalidierung: Das Flag /novalidate-cert deaktiviert die Prüfung des SSL-Zertifikats und sollte ausschließlich in Entwicklungsumgebungen verwendet werden – in Produktion ist es ein erhebliches Sicherheitsrisiko.

PHP 8.1: Ab PHP 8.1 gibt imap_open() ein IMAP\Connection-Objekt statt einer Ressource zurück. Code, der is_resource() zur Prüfung verwendet, muss angepasst werden.

Erweiterung: Die IMAP-Erweiterung ist nicht standardmäßig aktiviert. Unter Linux muss das Paket php-imap installiert sein, unter Windows muss extension=imap in der php.ini aktiviert werden. Ab PHP 8.4 ist die Erweiterung als PECL-Paket ausgegliedert.