Start · Sprachen · PHP · Referenz · imap_fetch_overview

imap_fetch_overview

Funktion

Liest eine Zusammenfassung der Kopfdaten (Header-Übersicht) für eine oder mehrere Nachrichten aus einem IMAP-Postfach.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_fetch_overview(IMAP\Connection $imap, string $sequence, int $flags = 0): array|false

Beschreibung

imap_fetch_overview() gibt für jede angegebene Nachricht ein Objekt mit den wichtigsten Header-Feldern zurück, ohne den vollständigen Nachrichteninhalt zu laden. Das ist besonders nützlich, um eine E-Mail-Liste darzustellen (Absender, Betreff, Datum, Gelesen-Status), ohne alle Nachrichten vollständig herunterzuladen.

Der Parameter sequence akzeptiert eine kommagetrennte Liste von Nachrichten-IDs oder Bereiche (z. B. 1:5 für die Nachrichten 1 bis 5). Mit dem Flag FT_UID kann anstelle der Sequenznummer die UID der Nachricht verwendet werden.

Jedes zurückgegebene Objekt enthält typischerweise Felder wie subject, from, to, date, message_id, size, uid, msgno, recent, flagged, answered, deleted, seen und draft. Felder, die im Header nicht vorhanden sind, können fehlen oder leer sein.

Die Funktion eignet sich ideal für performante Posteingangs-Übersichten in Webmailer-Anwendungen, da sie deutlich weniger Daten überträgt als das vollständige Herunterladen jeder Nachricht via imap_fetchheader() oder imap_fetchbody().

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine aktive IMAP-Verbindung, die mit imap_open() geöffnet wurde.
$sequence Pflicht string Die Sequenznummern der abzurufenden Nachrichten als String. Einzelne Nummern (1,3,5), Bereiche (1:10) oder Kombinationen sind möglich. Bei gesetztem Flag FT_UID werden UIDs statt Sequenznummern erwartet.
$flags int 0 Optionales Bitmask-Flag. Derzeit wird nur FT_UID unterstützt, das bewirkt, dass sequence als UIDs anstelle von Sequenznummern interpretiert wird.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array von Objekten zurück, wobei jedes Objekt die Header-Zusammenfassung einer Nachricht enthält. Bei einem Fehler oder einer leeren Sequenz wird false zurückgegeben. Fehlende Header-Felder sind im Objekt nicht gesetzt.

Beispiele

Posteingang-Übersicht anzeigen

<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheimesPasswort');

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

// Anzahl der Nachrichten ermitteln
$anzahl = imap_num_msg($imap);

if ($anzahl > 0) {
    // Übersicht der letzten 10 Nachrichten abrufen
    $von = max(1, $anzahl - 9);
    $overview = imap_fetch_overview($imap, "{$von}:{$anzahl}", 0);

    foreach ($overview as $msg) {
        $betreff = isset($msg->subject) ? imap_utf8($msg->subject) : '(kein Betreff)';
        $absender = isset($msg->from) ? imap_utf8($msg->from) : '(unbekannt)';
        $gelesen = $msg->seen ? '[Gelesen]' : '[Neu]';
        echo "{$gelesen} Von: {$absender} | Betreff: {$betreff} | Datum: {$msg->date}\n";
    }
}

imap_close($imap);
[Neu] Von: sender@example.com | Betreff: Testmail | Datum: Mon, 10 Jun 2024 08:00:00 +0200 [Gelesen] Von: info@example.com | Betreff: Newsletter | Datum: Sun, 9 Jun 2024 14:30:00 +0200

Nachrichten per UID abrufen

<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheimesPasswort');

// UIDs 1001 und 1005 abrufen
$overview = imap_fetch_overview($imap, '1001,1005', FT_UID);

if ($overview) {
    foreach ($overview as $msg) {
        echo 'UID: ' . $msg->uid . ' | Betreff: ' . (isset($msg->subject) ? imap_utf8($msg->subject) : '(kein Betreff)') . "\n";
        echo 'Größe: ' . $msg->size . ' Bytes | Markiert: ' . ($msg->flagged ? 'Ja' : 'Nein') . "\n";
    }
} else {
    echo 'Keine Nachrichten gefunden oder Fehler: ' . imap_last_error();
}

imap_close($imap);
UID: 1001 | Betreff: Wichtige Info Größe: 4823 Bytes | Markiert: Nein UID: 1005 | Betreff: Meeting-Einladung Größe: 12045 Bytes | Markiert: Ja

// Wichtig · Fallstricke

Zeichenkodierung: Header-Felder wie subject oder from können kodiert (z. B. als Base64 oder Quoted-Printable) vorliegen. Verwende imap_utf8() oder imap_mime_header_decode(), um diese korrekt darzustellen.

Erweiterung: Ab PHP 8.1 gibt imap_open() ein IMAP\Connection-Objekt statt einer Ressource zurück. Die IMAP-Erweiterung muss explizit installiert sein (ext-imap) und wird in neueren PHP-Versionen als veraltet betrachtet – es wird empfohlen, auf moderne Bibliotheken wie Symfony Mailer oder php-imap zu wechseln.

Sequenzgrenzen: Eine ungültige oder leere Sequenz kann zu false oder einem leeren Array führen. Prüfe mit imap_num_msg(), ob überhaupt Nachrichten vorhanden sind, bevor du die Funktion aufrufst.