Start · Sprachen · PHP · Referenz · imap_fetchheader

imap_fetchheader

Funktion

Gibt den vollständigen, unverarbeiteten RFC-2822-Header einer IMAP-Nachricht als Zeichenkette zurück.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_fetchheader(IMAP\Connection $imap, int $message_num, int $flags = 0): string|false

Beschreibung

imap_fetchheader() ruft den rohen Header-Block einer E-Mail-Nachricht vom IMAP-Server ab und gibt ihn als mehrzeilige Zeichenkette zurück. Der Header enthält alle Standard-Felder wie From, To, Subject, Date, Message-ID sowie alle weiteren benutzerdefinierten oder serverseitigen Felder im RFC-2822-Format.

Die Funktion ist nützlich, wenn man den Header manuell parsen, archivieren oder zur Weiterverarbeitung an eine andere Funktion (z. B. imap_rfc822_parse_headers()) übergeben möchte, ohne den gesamten Nachrichtentext herunterzuladen. Das spart Bandbreite und ist besonders bei großen Postfächern mit vielen Anhängen vorteilhaft.

Über den Parameter flags lässt sich das Verhalten steuern: Mit FT_UID wird message_num als UID anstelle der sequenziellen Nachrichtennummer interpretiert. Mit FT_INTERNAL werden Zeilenenden im internen Format (ohne Normalisierung) geliefert, und FT_PREFETCHTEXT lädt zusätzlich den Nachrichtentext vor, um spätere Roundtrips zum Server zu vermeiden.

Beachte, dass die Funktion nur mit einer aktiven IMAP-Verbindung funktioniert, die mit imap_open() geöffnet wurde. Ab PHP 8.1 ist der erste Parameter vom Typ IMAP\Connection statt der früheren Ressource.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine aktive IMAP-Verbindung, die mit imap_open() geöffnet wurde.
$message_num Pflicht int Die sequenzielle Nachrichtennummer oder, wenn FT_UID gesetzt ist, die UID der Nachricht.
$flags int 0 Bitmaske aus folgenden Konstanten: FT_UID (message_num als UID interpretieren), FT_INTERNAL (interne Zeilenenden beibehalten), FT_PREFETCHTEXT (Nachrichtentext vorabrufen).

Rückgabewert

Typ
string|false
Beschreibung
Gibt den rohen RFC-2822-Header der Nachricht als Zeichenkette zurück. Bei einem Fehler (z. B. ungültige Nachrichtennummer oder Verbindungsfehler) wird false zurückgegeben.

Beispiele

Einfaches Abrufen und Ausgeben des Nachrichtenheaders

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

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

// Header der ersten Nachricht abrufen
$header = imap_fetchheader($imap, 1);

if ($header !== false) {
    echo htmlspecialchars($header);
} else {
    echo 'Header konnte nicht abgerufen werden.';
}

imap_close($imap);
Date: Mon, 01 Jan 2024 10:00:00 +0100 From: sender@example.com To: user@example.com Subject: Testbetreff Message-ID: <abc123@example.com> ...

Header per UID abrufen und mit imap_rfc822_parse_headers() parsen

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

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

// Nachrichten-UIDs suchen
$uids = imap_search($imap, 'UNSEEN', SE_UID);

if ($uids) {
    foreach ($uids as $uid) {
        // Header über UID abrufen
        $rawHeader = imap_fetchheader($imap, $uid, FT_UID);

        if ($rawHeader !== false) {
            // Header parsen
            $parsed = imap_rfc822_parse_headers($rawHeader);

            echo 'Von: ' . $parsed->fromaddress . PHP_EOL;
            echo 'Betreff: ' . imap_utf8($parsed->subject) . PHP_EOL;
            echo 'Datum: ' . $parsed->date . PHP_EOL;
            echo str_repeat('-', 40) . PHP_EOL;
        }
    }
}

imap_close($imap);
Von: sender@example.com Betreff: Wichtige Mitteilung Datum: Mon, 01 Jan 2024 10:00:00 +0100 ----------------------------------------

// Wichtig · Fallstricke

Deprecation: Die gesamte imap_*-Erweiterung wurde ab PHP 8.4 als veraltet markiert (deprecated). Für neue Projekte wird empfohlen, auf moderne Bibliotheken wie ddeboer/imap oder direkte Implementierungen über Sockets umzusteigen.

Zeichenkodierung: Betreff und andere Header-Felder können nach RFC 2047 kodiert sein (z. B. =?UTF-8?B?...?=). Nutze imap_utf8() oder imap_mime_header_decode() zur sicheren Dekodierung, bevor die Werte ausgegeben werden, um XSS-Angriffe zu vermeiden.

Ressourcenverbrauch: Bei sehr vielen Nachrichten sollten Header nie in einer unbegrenzten Schleife ohne Paginierung abgerufen werden, da dies den Speicher- und Zeitaufwand erheblich steigern kann.