Signatur
Beschreibung
imap_reopen() ermöglicht es, einen bereits geöffneten IMAP-Stream auf ein anderes Postfach umzuschalten. Dies ist effizienter als das Schließen der Verbindung mit imap_close() und das erneute Öffnen mit imap_open(), da die bestehende TCP-Verbindung zum Mailserver weitergenutzt wird.
Die Funktion ist besonders nützlich, wenn innerhalb einer Skript-Ausführung mehrere Postfächer desselben IMAP-Servers nacheinander verarbeitet werden sollen, z. B. beim Durchsuchen von Ordnern (Inbox, Sent, Drafts usw.).
Der $mailbox-Parameter folgt dem gleichen Format wie bei imap_open(): {mail.example.com:993/imap/ssl}INBOX. Über den optionalen Parameter $flags lässt sich z. B. OP_READONLY übergeben, um das Postfach schreibgeschützt zu öffnen.
Im Fehlerfall gibt die Funktion false zurück; mithilfe von imap_errors() lassen sich detaillierte Fehlermeldungen abrufen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $imap Pflicht | IMAP\Connection | Ein gültiges IMAP-Verbindungsobjekt, das zuvor mit imap_open() erstellt wurde. |
|
| $mailbox Pflicht | string | Der vollständige Postfach-Name im Format {server:port/flags}Ordnername, z. B. {mail.example.com:993/imap/ssl}INBOX. |
|
| $flags | int | 0 | Optionale Bitmaske von Flags. Mögliche Werte sind z. B. OP_READONLY (Postfach nur lesend öffnen) oder OP_ANONYMOUS. |
| $retries | int | 0 | Anzahl der Wiederholungsversuche bei einem Verbindungsfehler. Standardmäßig wird kein erneuter Versuch unternommen. |
Rückgabewert
true zurück, wenn das Postfach erfolgreich neu geöffnet wurde, andernfalls false. Fehlerdetails können über imap_errors() abgerufen werden.Beispiele
Nacheinander mehrere Ordner desselben Servers verarbeiten
<?php
$mailbox = '{mail.example.com:993/imap/ssl}INBOX';
$imap = imap_open($mailbox, 'user@example.com', 'geheimesPasswort');
if (!$imap) {
die('Verbindung fehlgeschlagen: ' . implode(', ', imap_errors()));
}
// Nachrichten in der Inbox zählen
$inboxCount = imap_num_msg($imap);
echo "Inbox: {$inboxCount} Nachrichten\n";
// Auf den Gesendet-Ordner wechseln
if (imap_reopen($imap, '{mail.example.com:993/imap/ssl}Sent')) {
$sentCount = imap_num_msg($imap);
echo "Gesendet: {$sentCount} Nachrichten\n";
} else {
echo 'Fehler beim Wechseln: ' . implode(', ', imap_errors()) . "\n";
}
imap_close($imap);
?>
Postfach schreibgeschützt öffnen und Betreff-Zeilen lesen
<?php
$server = '{mail.example.com:993/imap/ssl}';
$imap = imap_open($server . 'INBOX', 'user@example.com', 'geheimesPasswort');
if (!$imap) {
die('Verbindung fehlgeschlagen.');
}
// Auf Drafts-Ordner wechseln, nur lesend
if (imap_reopen($imap, $server . 'Drafts', OP_READONLY)) {
$count = imap_num_msg($imap);
for ($i = 1; $i <= min($count, 5); $i++) {
$header = imap_headerinfo($imap, $i);
echo 'Betreff: ' . $header->subject . "\n";
}
} else {
echo 'Konnte Drafts nicht öffnen: ' . implode(', ', imap_errors());
}
imap_close($imap);
?>
// Wichtig · Fallstricke
Deprecation-Hinweis: Ab PHP 8.1.0 wurde der bisherige Ressource-Typ durch die Klasse IMAP\Connection ersetzt. Der erste Parameter muss daher ein Objekt dieses Typs sein.
Sicherheit: Postfachnamen sollten niemals direkt aus Benutzereingaben übernommen werden, da ein manipulierter Postfachname dazu führen könnte, auf andere Postfächer zuzugreifen. Eingaben stets validieren und auf erlaubte Ordnernamen einschränken.
Die IMAP-Erweiterung muss beim Kompilieren von PHP aktiviert sein (--with-imap) oder als Shared Extension geladen werden. In PHP 8.4 wird die Erweiterung als deprecated eingestuft und soll in einer späteren Version entfernt werden.