Start · Sprachen · PHP · Referenz · imap_reopen

imap_reopen

Funktion

Öffnet einen bestehenden IMAP-Stream für ein anderes Postfach neu, ohne die Verbindung zu trennen.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_reopen(IMAP\Connection $imap, string $mailbox, int $flags = 0, int $retries = 0): bool

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

Typ
bool
Beschreibung
Gibt 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);
?>
Inbox: 42 Nachrichten Gesendet: 17 Nachrichten

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);
?>
Betreff: Entwurf 1 Betreff: Entwurf 2 Betreff: Entwurf 3

// 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.