Signatur
Beschreibung
imap_headerinfo() ruft die Kopfdaten einer bestimmten Nachricht aus einem IMAP-Postfach ab und liefert ein strukturiertes stdClass-Objekt mit allen relevanten Header-Feldern wie Absender, Empfänger, Betreff, Datum und Nachrichtenstatus.
Die Funktion ist besonders nützlich, wenn man gezielt Metadaten einzelner E-Mails verarbeiten möchte, ohne den vollständigen Nachrichtentext laden zu müssen. Sie gibt unter anderem Felder wie subject, from, to, date, message_id, Msgno, Unseen, Flagged, Answered, Deleted und Draft zurück.
Die Parameter fromlength und subjectlength begrenzen die Länge der vorformatierten Felder fetchfrom und fetchsubject im Rückgabeobjekt. Mit defaulthost kann ein Standard-Hostname für unvollständige Adressen angegeben werden.
Beachte, dass die IMAP-Erweiterung in PHP 8.1 die Verbindungsressource von resource auf IMAP\Connection umgestellt hat. Die Funktion setzt eine aktive IMAP-Verbindung voraus, die zuvor mit imap_open() erzeugt wurde.
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 fortlaufende Nachrichtennummer (nicht die UID) der Nachricht im aktuell geöffneten Postfach. | |
| $fromlength | int | 0 | Maximale Zeichenanzahl für das vorformatierte Feld fetchfrom. Bei 0 wird kein Limit gesetzt. |
| $subjectlength | int | 0 | Maximale Zeichenanzahl für das vorformatierte Feld fetchsubject. Bei 0 wird kein Limit gesetzt. |
| $defaulthost | string|null | null | Standard-Hostname, der für E-Mail-Adressen ohne expliziten Host-Anteil verwendet wird. |
Rückgabewert
stdClass-Objekt mit den Header-Informationen zurück. Bei einem Fehler wird false zurückgegeben. Das Objekt enthält u. a. die Felder date, subject, from (Array von Adressobjekten), to, message_id, Msgno, Unseen, Flagged, Answered, Deleted, Draft, fetchfrom und fetchsubject.Beispiele
Betreff und Absender einer Nachricht ausgeben
<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheimesPasswort');
if (!$imap) {
die('Verbindung fehlgeschlagen: ' . imap_last_error());
}
$msgNum = 1; // Erste Nachricht im Postfach
$header = imap_headerinfo($imap, $msgNum, 50, 80);
if ($header) {
echo 'Betreff: ' . $header->fetchsubject . PHP_EOL;
echo 'Von: ' . $header->fetchfrom . PHP_EOL;
echo 'Datum: ' . $header->date . PHP_EOL;
echo 'Gelesen: ' . ($header->Unseen === 'U' ? 'Nein' : 'Ja') . PHP_EOL;
} else {
echo 'Nachricht nicht gefunden.';
}
imap_close($imap);
Alle Empfänger einer Nachricht auflisten
<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheimesPasswort');
$header = imap_headerinfo($imap, 3);
if ($header && isset($header->to)) {
echo 'Empfänger:' . PHP_EOL;
foreach ($header->to as $empfaenger) {
$name = isset($empfaenger->personal) ? $empfaenger->personal : '';
$adresse = $empfaenger->mailbox . '@' . $empfaenger->host;
echo ' - ' . ($name ? "$name <$adresse>" : $adresse) . PHP_EOL;
}
}
imap_close($imap);
// Wichtig · Fallstricke
Nachrichtennummer vs. UID: Der Parameter message_num ist die sequenzielle Nachrichtennummer, keine permanente UID. Nach dem Löschen von Nachrichten oder beim nächsten Verbindungsaufbau können sich die Nummern ändern. Für dauerhafte Referenzen sollte imap_uid() verwendet werden.
Zeichenkodierung: Betreff und Absendername können MIME-kodiert sein (z. B. =?UTF-8?B?...?=). Zur Dekodierung steht imap_mime_header_decode() zur Verfügung.
PHP 8.1: Ab PHP 8.1 erwartet die Funktion ein IMAP\Connection-Objekt statt einer veralteten resource. Älterer Code muss ggf. angepasst werden.