Start · Sprachen · PHP · Referenz · dns_get_mx

dns_get_mx

Funktion

Ermittelt die MX-Einträge (Mail-Exchanger) für einen Hostnamen — Alias von <code>getmxrr()</code>.

seit PHP 5.0.0 Kategorie: http

Signatur

dns_get_mx(string $hostname, array &$hosts, array &$weights = []): bool

Beschreibung

dns_get_mx() ist ein direkter Alias der Funktion getmxrr() und sucht im DNS nach allen MX-Ressourceneinträgen (Mail-Exchanger Records), die für den übergebenen Hostnamen hinterlegt sind. Die gefundenen Mailserver-Hostnamen werden in das Array $hosts geschrieben, die dazugehörigen Prioritätswerte (Weights/Preference-Werte) optional in das Array $weights.

Der Einsatz ist typisch bei der Verifikation von E-Mail-Adressen auf Serverseite: Bevor eine Nachricht verschickt wird, kann geprüft werden, ob für die Domain des Empfängers überhaupt MX-Einträge existieren. So lassen sich ungültige Domains frühzeitig herausfiltern, ohne eine Verbindung zu einem Mailserver herstellen zu müssen.

Die Arrays $hosts und $weights werden als Referenz übergeben und von der Funktion befüllt. Der Index in beiden Arrays ist dabei identisch, sodass $hosts[0] und $weights[0] zusammengehören. Ein niedrigerer Gewichtswert bedeutet höhere Priorität beim Mailversand.

Da dns_get_mx() lediglich ein Alias von getmxrr() ist, verhalten sich beide Funktionen identisch. Es empfiehlt sich, konsistent eine der beiden Varianten zu verwenden; in modernem Code wird häufig dns_get_record() mit DNS_MX bevorzugt, da diese Funktion noch mehr Kontrolle und Flexibilität bietet.

Parameter

Name Typ Default Beschreibung
$hostname Pflicht string Der Domainname, für den die MX-Einträge abgefragt werden sollen (z. B. 'example.com').
$hosts Pflicht array Wird als Referenz übergeben und nach dem Aufruf mit den gefundenen Mailserver-Hostnamen (MX-Records) befüllt.
$weights array [] Optionales Array, das als Referenz übergeben wird und nach dem Aufruf die Prioritätswerte (Preference-Werte) der MX-Einträge enthält. Niedrigere Werte bedeuten höhere Priorität.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn mindestens ein MX-Eintrag gefunden wurde, andernfalls false. Bei einem DNS-Fehler oder nicht existierender Domain wird ebenfalls false zurückgegeben.

Beispiele

MX-Einträge einer Domain abfragen

<?php
$hosts   = [];
$weights = [];

$domain = 'gmail.com';

if (dns_get_mx($domain, $hosts, $weights)) {
    echo "MX-Einträge für {$domain}:\n";
    foreach ($hosts as $index => $host) {
        echo "  Priorität {$weights[$index]}: {$host}\n";
    }
} else {
    echo "Keine MX-Einträge gefunden oder Domain existiert nicht.\n";
}
MX-Einträge für gmail.com: Priorität 5: gmail-smtp-in.l.google.com Priorität 10: alt1.gmail-smtp-in.l.google.com ...

E-Mail-Domain vor dem Versand validieren

<?php
function hatGueltigeMxEintraege(string $email): bool {
    $parts = explode('@', $email, 2);
    if (count($parts) !== 2 || empty($parts[1])) {
        return false;
    }
    $hosts = [];
    return dns_get_mx($parts[1], $hosts) && count($hosts) > 0;
}

$testAdressen = [
    'user@example.com',
    'user@ungueltige-domain-xyz123.de',
    'user@gmail.com',
];

foreach ($testAdressen as $adresse) {
    $gueltig = hatGueltigeMxEintraege($adresse) ? 'gültig' : 'ungültig';
    echo "{$adresse}: {$gueltig}\n";
}
user@example.com: gültig user@ungueltige-domain-xyz123.de: ungültig user@gmail.com: gültig

// Wichtig · Fallstricke

Alias-Verhalten: dns_get_mx() ist ein vollständiger Alias von getmxrr(). Beide Funktionen sind funktional identisch. In manchen Projekten wird getmxrr() bevorzugt, da sie die ältere und bekanntere Variante ist.

Keine Sortierung: Die zurückgegebenen MX-Einträge sind nicht automatisch nach Priorität sortiert. Soll der Mailserver mit der niedrigsten Prioritätsnummer (höchste Priorität) zuerst kontaktiert werden, muss das Array manuell sortiert werden, z. B. mit array_multisort().

Sicherheit: Die Funktion eignet sich zur ersten Plausibilitätsprüfung von E-Mail-Adressen, ersetzt jedoch keine vollständige Validierung. Ein vorhandener MX-Eintrag garantiert nicht, dass die E-Mail-Adresse tatsächlich existiert oder Nachrichten annimmt.

Alternative: Für umfangreichere DNS-Abfragen (A, AAAA, TXT, CNAME, etc.) bietet sich dns_get_record() mit dem Flag DNS_MX an, da diese Funktion strukturiertere Rückgabewerte liefert.