Start · Sprachen · PHP · Referenz · getmxrr

getmxrr

Funktion

Ermittelt die MX-Records (Mail Exchanger) für einen angegebenen Hostnamen und gibt die zugehörigen Hosts sowie deren Prioritätswerte zurück.

seit PHP 4.0.0 Kategorie: http

Signatur

getmxrr(string $hostname, array &$hosts, array &$weights = null): bool

Beschreibung

getmxrr() führt eine DNS-Abfrage durch, um die MX-Einträge (Mail Exchanger Records) für den angegebenen Hostnamen zu ermitteln. MX-Records definieren, welche Mailserver für den Empfang von E-Mails einer Domain zuständig sind und mit welcher Priorität diese angesprochen werden sollen.

Die gefundenen Hostnamen der Mailserver werden in das Array $hosts geschrieben, die korrespondierenden Gewichtungen (Prioritäten) in das optionale Array $weights. Ein niedrigerer Gewichtungswert bedeutet eine höhere Priorität – ein Server mit dem Gewicht 10 wird also bevorzugt gegenüber einem Server mit dem Gewicht 20.

Typische Einsatzgebiete sind die Validierung von E-Mail-Adressen (prüfen, ob eine Domain überhaupt einen Mailserver besitzt), das Debuggen von E-Mail-Konfigurationen sowie das Aufbauen eigener Mail-Routing-Logiken in PHP-Anwendungen.

Hinweis: Diese Funktion ist auf Windows-Plattformen nicht nativ verfügbar und kann dort zu Fehlern führen. Auf Unix/Linux-Systemen ist sie in der Regel immer verfügbar.

Parameter

Name Typ Default Beschreibung
$hostname Pflicht string Der Hostname oder Domainname, für den die MX-Records abgefragt werden sollen, z. B. 'example.com'.
$hosts Pflicht array Eine als Referenz übergebene Variable, die nach dem Aufruf ein Array mit den gefundenen Hostnamen der Mailserver enthält. Das Array wird von der Funktion befüllt.
$weights array null Eine optionale als Referenz übergebene Variable, die nach dem Aufruf ein Array mit den Prioritätswerten (Gewichtungen) der jeweiligen MX-Einträge enthält. Der Index korrespondiert mit dem Index in $hosts.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn mindestens ein MX-Record gefunden wurde, andernfalls false. Im Fehlerfall (z. B. ungültiger Hostname oder kein DNS-Eintrag) wird ebenfalls false zurückgegeben.

Beispiele

MX-Records einer Domain abfragen

<?php
$hostname = 'gmail.com';
$hosts = [];
$weights = [];

if (getmxrr($hostname, $hosts, $weights)) {
    echo "MX-Records für {$hostname}:\n";
    // Gemeinsam sortiert nach Priorität ausgeben
    array_multisort($weights, SORT_ASC, $hosts);
    foreach ($hosts as $index => $host) {
        echo "  Priorität {$weights[$index]}: {$host}\n";
    }
} else {
    echo "Keine MX-Records für {$hostname} gefunden.\n";
}
MX-Records für gmail.com: Priorität 5: gmail-smtp-in.l.google.com Priorität 10: alt1.gmail-smtp-in.l.google.com Priorität 20: alt2.gmail-smtp-in.l.google.com Priorität 30: alt3.gmail-smtp-in.l.google.com Priorität 40: alt4.gmail-smtp-in.l.google.com

E-Mail-Domain-Validierung mit MX-Check

<?php
function isValidMailDomain(string $email): bool {
    $parts = explode('@', $email);
    if (count($parts) !== 2) {
        return false;
    }
    $domain = $parts[1];
    $hosts = [];
    // Prüfen ob MX-Record oder zumsgst ein A-Record existiert
    if (getmxrr($domain, $hosts)) {
        return true;
    }
    // Fallback: prüfen ob zumindest ein A-Record vorhanden ist
    return checkdnsrr($domain, 'A');
}

$emails = [
    'user@gmail.com',
    'user@nicht-existent-domain-xyz123.de',
    'ungueltig',
];

foreach ($emails as $email) {
    $valid = isValidMailDomain($email) ? 'gültig' : 'ungültig';
    echo "{$email}: {$valid}\n";
}
user@gmail.com: gültig user@nicht-existent-domain-xyz123.de: ungültig ungueltig: ungültig

// Wichtig · Fallstricke

Windows-Kompatibilität: getmxrr() ist unter Windows nicht nativ implementiert. Auf Windows-Systemen kann alternativ die Funktion dns_get_record() mit dem Typ DNS_MX verwendet werden, die plattformübergreifend funktioniert.

Sicherheitshinweis: DNS-Abfragen können manipuliert werden (DNS-Spoofing). Verlasse dich nie ausschließlich auf MX-Records als Sicherheitsmerkmal, z. B. zur Validierung ob eine E-Mail-Adresse legitim ist. Ein vorhandener MX-Record beweist nur, dass die Domain technisch E-Mails empfangen kann.

Performance: Da getmxrr() einen Netzwerk-DNS-Request ausführt, kann die Funktion bei häufigem Aufruf die Anwendungsperformance beeinträchtigen. Ergebnisse sollten nach Möglichkeit gecacht werden.