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