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