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