Signatur
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
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);
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);
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);
// 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.