Signatur
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
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";
}
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";
}
// 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.