Start · Sprachen · PHP · Referenz · imap_rfc822_parse_adrlist

imap_rfc822_parse_adrlist

Funktion

Zerlegt einen String mit E-Mail-Adressen gemäß RFC 822 in ein Array von Adressobjekten.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_rfc822_parse_adrlist(string $string, string $default_host): array

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

Typ
array
Beschreibung
Gibt ein Array von Objekten zurück. Jedes Objekt besitzt folgende Eigenschaften: 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;
}
Name: Max Mustermann Mailbox: max Host: example.com --- Name: (kein Name) Mailbox: erika Host: example.org --- Name: (kein Name) Mailbox: noreply Host: fallback.example.com ---

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);
alice@example.com, bob@example.net, charlie@example.org

// 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.