Signatur
Beschreibung
imap_rfc822_parse_adrlist() analysiert eine Zeichenkette, die eine oder mehrere E-Mail-Adressen im RFC-822-Format enthält, und gibt ein Array von Objekten zurück. Jedes Objekt repräsentiert eine einzelne Adresse mit den Eigenschaften mailbox (lokaler Teil), host (Domainname), personal (Anzeigename) und adl (Source-Route, selten verwendet).
Die Funktion ist besonders nützlich, wenn E-Mail-Header-Felder wie To:, From: oder CC: programmatisch ausgewertet werden sollen. Der Parameter default_host wird als Hostname eingesetzt, wenn eine Adresse keinen Hostteil enthält (z. B. bei einfachem Benutzernamen ohne @).
Die Funktion gehört zur IMAP-Erweiterung und erfordert, dass diese in PHP aktiviert ist. Sie kann jedoch auch eingesetzt werden, wenn keine aktive IMAP-Verbindung besteht — sie benötigt lediglich die IMAP-Bibliothek zur String-Analyse.
Typische Einsatzgebiete sind das Validieren und Normalisieren von E-Mail-Adressen aus Formular-Eingaben, das Parsen von Mailinglist-Headern oder das Extrahieren einzelner Adresskomponenten aus komplexen Empfängerfeldern.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Der zu parsende Adress-String im RFC-822-Format, z. B. "Max Mustermann <max@example.com>, foo@bar.de". |
|
| $default_host Pflicht | string | Hostname, der für Adressen ohne @-Teil als Standard-Domain eingesetzt wird. |
Rückgabewert
mailbox (lokaler Teil der Adresse), host (Domainname, ggf. default_host), personal (optionaler Anzeigename) und adl (Source-Route, meist leer). Im Fehlerfall oder bei einem leeren Eingabe-String wird ein leeres Array zurückgegeben.Beispiele
Einfaches Parsen einer Adressliste
<?php
$addresses = imap_rfc822_parse_adrlist(
'Max Mustermann <max@example.com>, erika@example.org, noreply',
'fallback.example.com'
);
foreach ($addresses as $addr) {
echo 'Name: ' . ($addr->personal ?? '(kein Name)') . PHP_EOL;
echo 'Mailbox: ' . $addr->mailbox . PHP_EOL;
echo 'Host: ' . $addr->host . PHP_EOL;
echo '---' . PHP_EOL;
}
Extraktion aller E-Mail-Adressen aus einem To-Header
<?php
$toHeader = 'Alice <alice@example.com>, Bob <bob@example.net>, charlie@example.org';
$parsed = imap_rfc822_parse_adrlist($toHeader, 'localhost');
$emails = [];
foreach ($parsed as $addr) {
if (!empty($addr->mailbox) && !empty($addr->host)) {
$emails[] = $addr->mailbox . '@' . $addr->host;
}
}
echo implode(', ', $emails);
// Wichtig · Fallstricke
Erweiterung erforderlich: Die Funktion gehört zur IMAP-Erweiterung (ext-imap). Seit PHP 8.4 ist diese Erweiterung als PECL-Paket ausgegliedert und muss separat installiert werden.
Sicherheit: Der Eingabe-String sollte vor der Verwendung der enthaltenen Adressen stets validiert werden. imap_rfc822_parse_adrlist() parst den String nach bestem Wissen, garantiert aber keine Valididät der enthaltenen Adressen. Nutze zusätzlich filter_var($email, FILTER_VALIDATE_EMAIL), bevor du eine Adresse weiterverwendest.
Deprecated-Hinweis: Mit der Auslagerung der IMAP-Erweiterung in PHP 8.4 sollte langfristig eine alternative Bibliothek wie zbateson/mail-mime-parser in Betracht gezogen werden.