W3docs

Función PHP dns_get_mx(): Todo lo que necesitas saber

Aprende sobre la función PHP dns_get_mx(), su eliminación en PHP 8.2 y cómo usar dns_get_record() con DNS_MX como alternativa moderna.

Como desarrollador PHP, es posible que necesites obtener los registros de intercambio de correo (MX) para un nombre de dominio. La función dns_get_mx() se utilizaba históricamente para este propósito, pero fue eliminada en PHP 8.2. El enfoque moderno usa dns_get_record() con la bandera DNS_MX. En este artículo, cubriremos la función heredada, su deprecación y cómo usar la alternativa recomendada.

¿Qué es la función dns_get_mx()?

La función dns_get_mx() era una función integrada de PHP que recuperaba los registros de intercambio de correo (MX) para un nombre de dominio determinado. Los registros MX indican a otros servidores de correo qué hosts son responsables de aceptar correo electrónico para un dominio, clasificados por prioridad. dns_get_mx() era un alias de getmxrr() y fue eliminada en PHP 8.2. El reemplazo recomendado es dns_get_record($hostname, DNS_MX).

La sintaxis heredada de dns_get_mx()

La función original (ahora eliminada) era un alias de getmxrr() y utilizaba parámetros por referencia para devolver sus resultados:

dns_get_mx($hostname, &$mxhosts, &$weight);

La función recibía tres parámetros:

  • $hostname: El nombre de dominio del que deseas recuperar los registros MX.
  • $mxhosts: Una variable por referencia que se rellena con la lista de nombres de host MX.
  • $weight: Una variable por referencia opcional que se rellena con la prioridad (preferencia) de cada host.

Dado que los resultados se devolvían mediante referencias en lugar de un valor de retorno, la función solo retornaba true en caso de éxito o false en caso de fallo. Este patrón más antiguo es precisamente la razón por la que la función fue retirada en favor de dns_get_record(), que devuelve un array.

Cómo recuperar registros MX hoy en día

El enfoque moderno es dns_get_record($hostname, DNS_MX), que devuelve un array de arrays asociativos —uno por registro— y funciona en todas las versiones de PHP compatibles:

php— editable, runs on the server

Aquí recuperamos los registros MX de gmail.com. dns_get_record() devuelve un array de registros en caso de éxito, o false en caso de fallo. Recorremos los registros con foreach e imprimimos el host del servidor de correo y su prioridad. Ten en cuenta que las consultas DNS pueden bloquearse o fallar con dominios inválidos, así que comprueba siempre el valor de retorno y considera el manejo de tiempos de espera en producción.

Comprender el array devuelto

Cada registro MX es un array asociativo. Las claves que usarás con más frecuencia son:

  • target: el nombre de host del servidor de correo que debe recibir el correo del dominio.
  • pri: la prioridad (preferencia) — los números más bajos se intentan primero. Esta es la clave que reemplaza al antiguo parámetro por referencia $weight; nota que es pri, no priority.
  • host: el dominio al que pertenece el registro.
  • type: el tipo de registro, aquí siempre MX.
  • ttl: cuánto tiempo (en segundos) puede almacenarse en caché el registro.

Ordenar por prioridad

DNS no garantiza que los registros se devuelvan en orden de prioridad, así que ordénalos tú mismo antes de elegir un servidor de correo:

<?php

$records = dns_get_record("gmail.com", DNS_MX);
usort($records, fn($a, $b) => $a['pri'] <=> $b['pri']);

foreach ($records as $record) {
  echo $record['pri'] . " => " . $record['target'] . "\n";
}

Un cliente de correo intenta primero el host de menor prioridad y recurre a números más altos solo si es inaccesible.

Funciones relacionadas

  • dns_get_record() — el reemplazo de propósito general; pasa DNS_MX, DNS_A, DNS_TXT, etc.
  • getmxrr() — el equivalente con parámetros por referencia del que dns_get_mx() era alias.
  • checkdnsrr() — comprueba si existe un registro de un tipo determinado para un host.

Conclusión

Aunque dns_get_mx() fue en su momento el estándar para recuperar registros MX, ha sido eliminada en PHP 8.2. Usa dns_get_record($hostname, DNS_MX) en su lugar para consultas DNS modernas y fiables. Esperamos que esta guía te ayude a implementar búsquedas de registros MX de forma efectiva en tus aplicaciones PHP.

Práctica

Práctica
¿Qué realiza la función dns_get_mx() en PHP?
¿Qué realiza la función dns_get_mx() en PHP?
Was this page helpful?